brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · d075007 Raw
162 lines · plain
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}3 4; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s --translator-compatibility-mode -o - | FileCheck %s --check-prefix=CHECK-COMPAT5; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s --translator-compatibility-mode -o - -filetype=obj | spirv-val %}6 7; CHECK-DAG: OpName [[EQ:%.*]] "test_eq"8; CHECK-DAG: OpName [[NE:%.*]] "test_ne"9; CHECK-COMPAT-DAG: OpName [[EQ:%.*]] "test_eq"10; CHECK-COMPAT-DAG: OpName [[NE:%.*]] "test_ne"11; CHECK-DAG: OpName [[ULT:%.*]] "test_ult"12; CHECK-DAG: OpName [[SLT:%.*]] "test_slt"13; CHECK-DAG: OpName [[ULE:%.*]] "test_ule"14; CHECK-DAG: OpName [[SLE:%.*]] "test_sle"15; CHECK-DAG: OpName [[UGT:%.*]] "test_ugt"16; CHECK-DAG: OpName [[SGT:%.*]] "test_sgt"17; CHECK-DAG: OpName [[UGE:%.*]] "test_uge"18; CHECK-DAG: OpName [[SGE:%.*]] "test_sge"19 20;; FIXME: Translator uses OpIEqual/OpINotEqual for test_eq/test_ne cases21; CHECK:      [[EQ]] = OpFunction22; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter23; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter24; CHECK-NEXT: OpLabel25; CHECK-NEXT: [[R:%.*]] = OpPtrEqual {{%.+}} [[A]] [[B]]26; CHECK-NEXT: OpReturnValue [[R]]27; CHECK-NEXT: OpFunctionEnd28; CHECK-COMPAT: [[EQ]] = OpFunction29; CHECK-COMPAT-NOT: OpPtrEqual30; CHECK-COMPAT: OpFunctionEnd31define i1 @test_eq(i16* %a, i16* %b) {32  %r = icmp eq i16* %a, %b33  ret i1 %r34}35 36; CHECK:      [[NE]] = OpFunction37; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter38; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter39; CHECK-NEXT: OpLabel40; CHECK-NEXT: [[R:%.*]] = OpPtrNotEqual {{%.+}} [[A]] [[B]]41; CHECK-NEXT: OpReturnValue [[R]]42; CHECK-NEXT: OpFunctionEnd43; CHECK-COMPAT: [[NE]] = OpFunction44; CHECK-COMPAT-NOT: OpPtrNotEqual45; CHECK-COMPAT: OpFunctionEnd46define i1 @test_ne(i16* %a, i16* %b) {47  %r = icmp ne i16* %a, %b48  ret i1 %r49}50 51; CHECK:      [[SLT]] = OpFunction52; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter53; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter54; CHECK-NEXT: OpLabel55; CHECK-NEXT: [[AI:%.*]] = OpConvertPtrToU {{%.+}} [[A]]56; CHECK-NEXT: [[BI:%.*]] = OpConvertPtrToU {{%.+}} [[B]]57; CHECK:      [[R:%.*]] = OpSLessThan {{%.+}} [[AI]] [[BI]]58; CHECK-NEXT: OpReturnValue [[R]]59; CHECK-NEXT: OpFunctionEnd60define i1 @test_slt(i16* %a, i16* %b) {61  %r = icmp slt i16* %a, %b62  ret i1 %r63}64 65; CHECK:      [[ULT]] = OpFunction66; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter67; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter68; CHECK-NEXT: OpLabel69; CHECK-NEXT: [[AI:%.*]] = OpConvertPtrToU {{%.+}} [[A]]70; CHECK-NEXT: [[BI:%.*]] = OpConvertPtrToU {{%.+}} [[B]]71; CHECK:      [[R:%.*]] = OpULessThan {{%.+}} [[AI]] [[BI]]72; CHECK-NEXT: OpReturnValue [[R]]73; CHECK-NEXT: OpFunctionEnd74define i1 @test_ult(i16* %a, i16* %b) {75  %r = icmp ult i16* %a, %b76  ret i1 %r77}78 79; CHECK:      [[ULE]] = OpFunction80; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter81; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter82; CHECK-NEXT: OpLabel83; CHECK-NEXT: [[AI:%.*]] = OpConvertPtrToU {{%.+}} [[A]]84; CHECK-NEXT: [[BI:%.*]] = OpConvertPtrToU {{%.+}} [[B]]85; CHECK:      [[R:%.*]] = OpULessThanEqual {{%.+}} [[AI]] [[BI]]86; CHECK-NEXT: OpReturnValue [[R]]87; CHECK-NEXT: OpFunctionEnd88define i1 @test_ule(i16* %a, i16* %b) {89  %r = icmp ule i16* %a, %b90  ret i1 %r91}92 93; CHECK:      [[SLE]] = OpFunction94; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter95; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter96; CHECK-NEXT: OpLabel97; CHECK-NEXT: [[AI:%.*]] = OpConvertPtrToU {{%.+}} [[A]]98; CHECK-NEXT: [[BI:%.*]] = OpConvertPtrToU {{%.+}} [[B]]99; CHECK:      [[R:%.*]] = OpSLessThanEqual {{%.+}} [[AI]] [[BI]]100; CHECK-NEXT: OpReturnValue [[R]]101; CHECK-NEXT: OpFunctionEnd102define i1 @test_sle(i16* %a, i16* %b) {103  %r = icmp sle i16* %a, %b104  ret i1 %r105}106 107; CHECK:      [[UGT]] = OpFunction108; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter109; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter110; CHECK-NEXT: OpLabel111; CHECK-NEXT: [[AI:%.*]] = OpConvertPtrToU {{%.+}} [[A]]112; CHECK-NEXT: [[BI:%.*]] = OpConvertPtrToU {{%.+}} [[B]]113; CHECK:      [[R:%.*]] = OpUGreaterThan {{%.+}} [[AI]] [[BI]]114; CHECK-NEXT: OpReturnValue [[R]]115; CHECK-NEXT: OpFunctionEnd116define i1 @test_ugt(i16* %a, i16* %b) {117  %r = icmp ugt i16* %a, %b118  ret i1 %r119}120 121; CHECK:      [[SGT]] = OpFunction122; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter123; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter124; CHECK-NEXT: OpLabel125; CHECK-NEXT: [[AI:%.*]] = OpConvertPtrToU {{%.+}} [[A]]126; CHECK-NEXT: [[BI:%.*]] = OpConvertPtrToU {{%.+}} [[B]]127; CHECK:      [[R:%.*]] = OpSGreaterThan {{%.+}} [[AI]] [[BI]]128; CHECK-NEXT: OpReturnValue [[R]]129; CHECK-NEXT: OpFunctionEnd130define i1 @test_sgt(i16* %a, i16* %b) {131  %r = icmp sgt i16* %a, %b132  ret i1 %r133}134 135; CHECK:      [[UGE]] = OpFunction136; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter137; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter138; CHECK-NEXT: OpLabel139; CHECK-NEXT: [[AI:%.*]] = OpConvertPtrToU {{%.+}} [[A]]140; CHECK-NEXT: [[BI:%.*]] = OpConvertPtrToU {{%.+}} [[B]]141; CHECK:      [[R:%.*]] = OpUGreaterThanEqual {{%.+}} [[AI]] [[BI]]142; CHECK-NEXT: OpReturnValue [[R]]143; CHECK-NEXT: OpFunctionEnd144define i1 @test_uge(i16* %a, i16* %b) {145  %r = icmp uge i16* %a, %b146  ret i1 %r147}148 149; CHECK:      [[SGE]] = OpFunction150; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter151; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter152; CHECK-NEXT: OpLabel153; CHECK-NEXT: [[AI:%.*]] = OpConvertPtrToU {{%.+}} [[A]]154; CHECK-NEXT: [[BI:%.*]] = OpConvertPtrToU {{%.+}} [[B]]155; CHECK:      [[R:%.*]] = OpSGreaterThanEqual {{%.+}} [[AI]] [[BI]]156; CHECK-NEXT: OpReturnValue [[R]]157; CHECK-NEXT: OpFunctionEnd158define i1 @test_sge(i16* %a, i16* %b) {159  %r = icmp sge i16* %a, %b160  ret i1 %r161}162