brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 8d3657b Raw
70 lines · plain
1; This test ensures that LLVM IR bitwise instructions result in logical SPIR-V instructions2; when applied to i1 type3 4; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s5; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}6 7; CHECK-DAG: %[[#Char:]] = OpTypeInt 8 08; CHECK-DAG: %[[#Vec2Char:]] = OpTypeVector %[[#Char]] 29; CHECK-DAG: %[[#Bool:]] = OpTypeBool10; CHECK-DAG: %[[#Vec2Bool:]] = OpTypeVector %[[#Bool]] 211 12; CHECK: OpBitwiseAnd %[[#Char]]13; CHECK: OpBitwiseOr %[[#Char]]14; CHECK: OpBitwiseXor %[[#Char]]15; CHECK: OpBitwiseAnd %[[#Vec2Char]]16; CHECK: OpBitwiseOr %[[#Vec2Char]]17; CHECK: OpBitwiseXor %[[#Vec2Char]]18 19; CHECK: OpLogicalAnd %[[#Bool]]20 21; CHECK: OpLogicalAnd %[[#Bool]]22; CHECK: OpLogicalOr %[[#Bool]]23; CHECK: OpLogicalNotEqual %[[#Bool]]24; CHECK: OpLogicalAnd %[[#Vec2Bool]]25; CHECK: OpLogicalOr %[[#Vec2Bool]]26; CHECK: OpLogicalNotEqual %[[#Vec2Bool]]27 28define void @test1(i8 noundef %arg1, i8 noundef %arg2) {29  %cond1 = and i8 %arg1, %arg230  %cond2 = or i8 %arg1, %arg231  %cond3 = xor i8 %arg1, %arg232  ret void33}34 35define void @test1v(<2 x i8> noundef %arg1, <2 x i8> noundef %arg2) {36  %cond1 = and <2 x i8> %arg1, %arg237  %cond2 = or <2 x i8> %arg1, %arg238  %cond3 = xor <2 x i8> %arg1, %arg239  ret void40}41 42define void @test2(float noundef %real, float noundef %imag) {43entry:44  %realabs = tail call spir_func noundef float @_Z16__spirv_ocl_fabsf(float noundef %real)45  %cond1 = fcmp oeq float %realabs, 1.000000e+0046  %cond2 = fcmp oeq float %imag, 0.000000e+0047  %cond3 = and i1 %cond1, %cond248  br i1 %cond3, label %midlbl, label %cleanup49midlbl:50  br label %cleanup51cleanup:52  ret void53}54 55define void @test3(i1 noundef %arg1, i1 noundef %arg2) {56  %cond1 = and i1 %arg1, %arg257  %cond2 = or i1 %arg1, %arg258  %cond3 = xor i1 %arg1, %arg259  ret void60}61 62define void @test3v(<2 x i1> noundef %arg1, <2 x i1> noundef %arg2) {63  %cond1 = and <2 x i1> %arg1, %arg264  %cond2 = or <2 x i1> %arg1, %arg265  %cond3 = xor <2 x i1> %arg1, %arg266  ret void67}68 69declare dso_local spir_func noundef float @_Z16__spirv_ocl_fabsf(float noundef)70