18468e674SAndrey Tretyakov; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV 2*0a443f13SVyacheslav Levytskyy; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %} 38468e674SAndrey Tretyakov 48468e674SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#int:]] = OpTypeInt 32 0 58468e674SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#int2:]] = OpTypeVector %[[#int]] 2 68468e674SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#float:]] = OpTypeFloat 32 78468e674SAndrey Tretyakov; CHECK-SPIRV-DAG: %[[#float2:]] = OpTypeVector %[[#float]] 2 88468e674SAndrey Tretyakov 98468e674SAndrey Tretyakov; CHECK-SPIRV: OpFunction 108468e674SAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]] 118468e674SAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]] 128468e674SAndrey Tretyakov; CHECK-SPIRV: %[[#]] = OpSDiv %[[#int2]] %[[#A]] %[[#B]] 138468e674SAndrey Tretyakov; CHECK-SPIRV: OpFunctionEnd 148468e674SAndrey Tretyakov 158468e674SAndrey Tretyakov;; kernel void testSDiv(int2 a, int2 b, global int2 *res) { 168468e674SAndrey Tretyakov;; res[0] = a / b; 178468e674SAndrey Tretyakov;; } 188468e674SAndrey Tretyakov 198468e674SAndrey Tretyakovdefine dso_local spir_kernel void @testSDiv(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr { 208468e674SAndrey Tretyakoventry: 218468e674SAndrey Tretyakov %div = sdiv <2 x i32> %a, %b 228468e674SAndrey Tretyakov store <2 x i32> %div, <2 x i32> addrspace(1)* %res, align 8 238468e674SAndrey Tretyakov ret void 248468e674SAndrey Tretyakov} 258468e674SAndrey Tretyakov 268468e674SAndrey Tretyakov; CHECK-SPIRV: OpFunction 278468e674SAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]] 288468e674SAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]] 298468e674SAndrey Tretyakov; CHECK-SPIRV: %[[#]] = OpUDiv %[[#int2]] %[[#A]] %[[#B]] 308468e674SAndrey Tretyakov; CHECK-SPIRV: OpFunctionEnd 318468e674SAndrey Tretyakov 328468e674SAndrey Tretyakov;; kernel void testUDiv(uint2 a, uint2 b, global uint2 *res) { 338468e674SAndrey Tretyakov;; res[0] = a / b; 348468e674SAndrey Tretyakov;; } 358468e674SAndrey Tretyakov 368468e674SAndrey Tretyakovdefine dso_local spir_kernel void @testUDiv(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr { 378468e674SAndrey Tretyakoventry: 388468e674SAndrey Tretyakov %div = udiv <2 x i32> %a, %b 398468e674SAndrey Tretyakov store <2 x i32> %div, <2 x i32> addrspace(1)* %res, align 8 408468e674SAndrey Tretyakov ret void 418468e674SAndrey Tretyakov} 428468e674SAndrey Tretyakov 438468e674SAndrey Tretyakov; CHECK-SPIRV: OpFunction 448468e674SAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]] 458468e674SAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]] 468468e674SAndrey Tretyakov; CHECK-SPIRV: %[[#]] = OpFDiv %[[#float2]] %[[#A]] %[[#B]] 478468e674SAndrey Tretyakov; CHECK-SPIRV: OpFunctionEnd 488468e674SAndrey Tretyakov 498468e674SAndrey Tretyakov;; kernel void testFDiv(float2 a, float2 b, global float2 *res) { 508468e674SAndrey Tretyakov;; res[0] = a / b; 518468e674SAndrey Tretyakov;; } 528468e674SAndrey Tretyakov 538468e674SAndrey Tretyakovdefine dso_local spir_kernel void @testFDiv(<2 x float> noundef %a, <2 x float> noundef %b, <2 x float> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr { 548468e674SAndrey Tretyakoventry: 558468e674SAndrey Tretyakov %div = fdiv <2 x float> %a, %b 568468e674SAndrey Tretyakov store <2 x float> %div, <2 x float> addrspace(1)* %res, align 8 578468e674SAndrey Tretyakov ret void 588468e674SAndrey Tretyakov} 598468e674SAndrey Tretyakov 608468e674SAndrey Tretyakov; CHECK-SPIRV: OpFunction 618468e674SAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]] 628468e674SAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]] 638468e674SAndrey Tretyakov; CHECK-SPIRV: %[[#]] = OpSRem %[[#int2]] %[[#A]] %[[#B]] 648468e674SAndrey Tretyakov; CHECK-SPIRV: OpFunctionEnd 658468e674SAndrey Tretyakov 668468e674SAndrey Tretyakov;; kernel void testSRem(int2 a, int2 b, global int2 *res) { 678468e674SAndrey Tretyakov;; res[0] = a % b; 688468e674SAndrey Tretyakov;; } 698468e674SAndrey Tretyakov 708468e674SAndrey Tretyakovdefine dso_local spir_kernel void @testSRem(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr { 718468e674SAndrey Tretyakoventry: 728468e674SAndrey Tretyakov %rem = srem <2 x i32> %a, %b 738468e674SAndrey Tretyakov store <2 x i32> %rem, <2 x i32> addrspace(1)* %res, align 8 748468e674SAndrey Tretyakov ret void 758468e674SAndrey Tretyakov} 768468e674SAndrey Tretyakov 778468e674SAndrey Tretyakov; CHECK-SPIRV: OpFunction 788468e674SAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]] 798468e674SAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]] 808468e674SAndrey Tretyakov; CHECK-SPIRV: %[[#]] = OpUMod %[[#int2]] %[[#A]] %[[#B]] 818468e674SAndrey Tretyakov; CHECK-SPIRV: OpFunctionEnd 828468e674SAndrey Tretyakov 838468e674SAndrey Tretyakov;; kernel void testUMod(uint2 a, uint2 b, global uint2 *res) { 848468e674SAndrey Tretyakov;; res[0] = a % b; 858468e674SAndrey Tretyakov;; } 868468e674SAndrey Tretyakov 878468e674SAndrey Tretyakovdefine dso_local spir_kernel void @testUMod(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr { 888468e674SAndrey Tretyakoventry: 898468e674SAndrey Tretyakov %rem = urem <2 x i32> %a, %b 908468e674SAndrey Tretyakov store <2 x i32> %rem, <2 x i32> addrspace(1)* %res, align 8 918468e674SAndrey Tretyakov ret void 928468e674SAndrey Tretyakov} 93