368 lines · plain
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s2 3; CHECK-DAG: OpName [[UEQ:%.*]] "test_ueq"4; CHECK-DAG: OpName [[OEQ:%.*]] "test_oeq"5; CHECK-DAG: OpName [[UNE:%.*]] "test_une"6; CHECK-DAG: OpName [[ONE:%.*]] "test_one"7; CHECK-DAG: OpName [[ULT:%.*]] "test_ult"8; CHECK-DAG: OpName [[OLT:%.*]] "test_olt"9; CHECK-DAG: OpName [[ULE:%.*]] "test_ule"10; CHECK-DAG: OpName [[OLE:%.*]] "test_ole"11; CHECK-DAG: OpName [[UGT:%.*]] "test_ugt"12; CHECK-DAG: OpName [[OGT:%.*]] "test_ogt"13; CHECK-DAG: OpName [[UGE:%.*]] "test_uge"14; CHECK-DAG: OpName [[OGE:%.*]] "test_oge"15; CHECK-DAG: OpName [[UNO:%.*]] "test_uno"16; CHECK-DAG: OpName [[ORD:%.*]] "test_ord"17 18; CHECK-DAG: OpName [[v3UEQ:%.*]] "test_v3_ueq"19; CHECK-DAG: OpName [[v3OEQ:%.*]] "test_v3_oeq"20; CHECK-DAG: OpName [[v3UNE:%.*]] "test_v3_une"21; CHECK-DAG: OpName [[v3ONE:%.*]] "test_v3_one"22; CHECK-DAG: OpName [[v3ULT:%.*]] "test_v3_ult"23; CHECK-DAG: OpName [[v3OLT:%.*]] "test_v3_olt"24; CHECK-DAG: OpName [[v3ULE:%.*]] "test_v3_ule"25; CHECK-DAG: OpName [[v3OLE:%.*]] "test_v3_ole"26; CHECK-DAG: OpName [[v3UGT:%.*]] "test_v3_ugt"27; CHECK-DAG: OpName [[v3OGT:%.*]] "test_v3_ogt"28; CHECK-DAG: OpName [[v3UGE:%.*]] "test_v3_uge"29; CHECK-DAG: OpName [[v3OGE:%.*]] "test_v3_oge"30; CHECK-DAG: OpName [[v3UNO:%.*]] "test_v3_uno"31; CHECK-DAG: OpName [[v3ORD:%.*]] "test_v3_ord"32 33; CHECK: [[UEQ]] = OpFunction34; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter35; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter36; CHECK-NEXT: OpLabel37; CHECK-NEXT: [[R:%.*]] = OpFUnordEqual {{%.+}} [[A]] [[B]]38; CHECK-NEXT: OpReturnValue [[R]]39; CHECK-NEXT: OpFunctionEnd40define i1 @test_ueq(float %a, float %b) {41 %r = fcmp ueq float %a, %b42 ret i1 %r43}44 45; CHECK: [[OEQ]] = OpFunction46; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter47; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter48; CHECK-NEXT: OpLabel49; CHECK-NEXT: [[R:%.*]] = OpFOrdEqual {{%.+}} [[A]] [[B]]50; CHECK-NEXT: OpReturnValue [[R]]51; CHECK-NEXT: OpFunctionEnd52define i1 @test_oeq(float %a, float %b) {53 %r = fcmp oeq float %a, %b54 ret i1 %r55}56 57; CHECK: [[UNE]] = OpFunction58; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter59; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter60; CHECK-NEXT: OpLabel61; CHECK-NEXT: [[R:%.*]] = OpFUnordNotEqual {{%.+}} [[A]] [[B]]62; CHECK-NEXT: OpReturnValue [[R]]63; CHECK-NEXT: OpFunctionEnd64define i1 @test_une(float %a, float %b) {65 %r = fcmp une float %a, %b66 ret i1 %r67}68 69; CHECK: [[ONE]] = OpFunction70; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter71; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter72; CHECK-NEXT: OpLabel73; CHECK-NEXT: [[R:%.*]] = OpFOrdNotEqual {{%.+}} [[A]] [[B]]74; CHECK-NEXT: OpReturnValue [[R]]75; CHECK-NEXT: OpFunctionEnd76define i1 @test_one(float %a, float %b) {77 %r = fcmp one float %a, %b78 ret i1 %r79}80 81; CHECK: [[ULT]] = OpFunction82; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter83; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter84; CHECK-NEXT: OpLabel85; CHECK-NEXT: [[R:%.*]] = OpFUnordLessThan {{%.+}} [[A]] [[B]]86; CHECK-NEXT: OpReturnValue [[R]]87; CHECK-NEXT: OpFunctionEnd88define i1 @test_ult(float %a, float %b) {89 %r = fcmp ult float %a, %b90 ret i1 %r91}92 93; CHECK: [[OLT]] = OpFunction94; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter95; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter96; CHECK-NEXT: OpLabel97; CHECK-NEXT: [[R:%.*]] = OpFOrdLessThan {{%.+}} [[A]] [[B]]98; CHECK-NEXT: OpReturnValue [[R]]99; CHECK-NEXT: OpFunctionEnd100define i1 @test_olt(float %a, float %b) {101 %r = fcmp olt float %a, %b102 ret i1 %r103}104 105; CHECK: [[ULE]] = OpFunction106; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter107; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter108; CHECK-NEXT: OpLabel109; CHECK-NEXT: [[R:%.*]] = OpFUnordLessThanEqual {{%.+}} [[A]] [[B]]110; CHECK-NEXT: OpReturnValue [[R]]111; CHECK-NEXT: OpFunctionEnd112define i1 @test_ule(float %a, float %b) {113 %r = fcmp ule float %a, %b114 ret i1 %r115}116 117; CHECK: [[OLE]] = OpFunction118; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter119; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter120; CHECK-NEXT: OpLabel121; CHECK-NEXT: [[R:%.*]] = OpFOrdLessThanEqual {{%.+}} [[A]] [[B]]122; CHECK-NEXT: OpReturnValue [[R]]123; CHECK-NEXT: OpFunctionEnd124define i1 @test_ole(float %a, float %b) {125 %r = fcmp ole float %a, %b126 ret i1 %r127}128 129; CHECK: [[UGT]] = OpFunction130; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter131; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter132; CHECK-NEXT: OpLabel133; CHECK-NEXT: [[R:%.*]] = OpFUnordGreaterThan {{%.+}} [[A]] [[B]]134; CHECK-NEXT: OpReturnValue [[R]]135; CHECK-NEXT: OpFunctionEnd136define i1 @test_ugt(float %a, float %b) {137 %r = fcmp ugt float %a, %b138 ret i1 %r139}140 141; CHECK: [[OGT]] = OpFunction142; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter143; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter144; CHECK-NEXT: OpLabel145; CHECK-NEXT: [[R:%.*]] = OpFOrdGreaterThan {{%.+}} [[A]] [[B]]146; CHECK-NEXT: OpReturnValue [[R]]147; CHECK-NEXT: OpFunctionEnd148define i1 @test_ogt(float %a, float %b) {149 %r = fcmp ogt float %a, %b150 ret i1 %r151}152 153; CHECK: [[UGE]] = OpFunction154; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter155; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter156; CHECK-NEXT: OpLabel157; CHECK-NEXT: [[R:%.*]] = OpFUnordGreaterThanEqual {{%.+}} [[A]] [[B]]158; CHECK-NEXT: OpReturnValue [[R]]159; CHECK-NEXT: OpFunctionEnd160define i1 @test_uge(float %a, float %b) {161 %r = fcmp uge float %a, %b162 ret i1 %r163}164 165; CHECK: [[OGE]] = OpFunction166; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter167; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter168; CHECK-NEXT: OpLabel169; CHECK-NEXT: [[R:%.*]] = OpFOrdGreaterThanEqual {{%.+}} [[A]] [[B]]170; CHECK-NEXT: OpReturnValue [[R]]171; CHECK-NEXT: OpFunctionEnd172define i1 @test_oge(float %a, float %b) {173 %r = fcmp oge float %a, %b174 ret i1 %r175}176 177; CHECK: [[ORD]] = OpFunction178; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter179; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter180; CHECK-NEXT: OpLabel181; CHECK-NEXT: [[R:%.*]] = OpOrdered {{%.+}} [[A]] [[B]]182; CHECK-NEXT: OpReturnValue [[R]]183; CHECK-NEXT: OpFunctionEnd184define i1 @test_ord(float %a, float %b) {185 %r = fcmp ord float %a, %b186 ret i1 %r187}188 189; CHECK: [[UNO]] = OpFunction190; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter191; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter192; CHECK-NEXT: OpLabel193; CHECK-NEXT: [[R:%.*]] = OpUnordered {{%.+}} [[A]] [[B]]194; CHECK-NEXT: OpReturnValue [[R]]195; CHECK-NEXT: OpFunctionEnd196define i1 @test_uno(float %a, float %b) {197 %r = fcmp uno float %a, %b198 ret i1 %r199}200 201; CHECK: [[v3UEQ]] = OpFunction202; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter203; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter204; CHECK-NEXT: OpLabel205; CHECK-NEXT: [[R:%.*]] = OpFUnordEqual {{%.+}} [[A]] [[B]]206; CHECK-NEXT: OpReturnValue [[R]]207; CHECK-NEXT: OpFunctionEnd208define <3 x i1> @test_v3_ueq(<3 x float> %a, <3 x float> %b) {209 %r = fcmp ueq <3 x float> %a, %b210 ret <3 x i1> %r211}212 213; CHECK: [[v3OEQ]] = OpFunction214; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter215; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter216; CHECK-NEXT: OpLabel217; CHECK-NEXT: [[R:%.*]] = OpFOrdEqual {{%.+}} [[A]] [[B]]218; CHECK-NEXT: OpReturnValue [[R]]219; CHECK-NEXT: OpFunctionEnd220define <3 x i1> @test_v3_oeq(<3 x float> %a, <3 x float> %b) {221 %r = fcmp oeq <3 x float> %a, %b222 ret <3 x i1> %r223}224 225; CHECK: [[v3UNE]] = OpFunction226; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter227; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter228; CHECK-NEXT: OpLabel229; CHECK-NEXT: [[R:%.*]] = OpFUnordNotEqual {{%.+}} [[A]] [[B]]230; CHECK-NEXT: OpReturnValue [[R]]231; CHECK-NEXT: OpFunctionEnd232define <3 x i1> @test_v3_une(<3 x float> %a, <3 x float> %b) {233 %r = fcmp une <3 x float> %a, %b234 ret <3 x i1> %r235}236 237; CHECK: [[v3ONE]] = OpFunction238; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter239; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter240; CHECK-NEXT: OpLabel241; CHECK-NEXT: [[R:%.*]] = OpFOrdNotEqual {{%.+}} [[A]] [[B]]242; CHECK-NEXT: OpReturnValue [[R]]243; CHECK-NEXT: OpFunctionEnd244define <3 x i1> @test_v3_one(<3 x float> %a, <3 x float> %b) {245 %r = fcmp one <3 x float> %a, %b246 ret <3 x i1> %r247}248 249; CHECK: [[v3ULT]] = OpFunction250; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter251; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter252; CHECK-NEXT: OpLabel253; CHECK-NEXT: [[R:%.*]] = OpFUnordLessThan {{%.+}} [[A]] [[B]]254; CHECK-NEXT: OpReturnValue [[R]]255; CHECK-NEXT: OpFunctionEnd256define <3 x i1> @test_v3_ult(<3 x float> %a, <3 x float> %b) {257 %r = fcmp ult <3 x float> %a, %b258 ret <3 x i1> %r259}260 261; CHECK: [[v3OLT]] = OpFunction262; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter263; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter264; CHECK-NEXT: OpLabel265; CHECK-NEXT: [[R:%.*]] = OpFOrdLessThan {{%.+}} [[A]] [[B]]266; CHECK-NEXT: OpReturnValue [[R]]267; CHECK-NEXT: OpFunctionEnd268define <3 x i1> @test_v3_olt(<3 x float> %a, <3 x float> %b) {269 %r = fcmp olt <3 x float> %a, %b270 ret <3 x i1> %r271}272 273; CHECK: [[v3ULE]] = OpFunction274; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter275; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter276; CHECK-NEXT: OpLabel277; CHECK-NEXT: [[R:%.*]] = OpFUnordLessThanEqual {{%.+}} [[A]] [[B]]278; CHECK-NEXT: OpReturnValue [[R]]279; CHECK-NEXT: OpFunctionEnd280define <3 x i1> @test_v3_ule(<3 x float> %a, <3 x float> %b) {281 %r = fcmp ule <3 x float> %a, %b282 ret <3 x i1> %r283}284 285; CHECK: [[v3OLE]] = OpFunction286; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter287; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter288; CHECK-NEXT: OpLabel289; CHECK-NEXT: [[R:%.*]] = OpFOrdLessThanEqual {{%.+}} [[A]] [[B]]290; CHECK-NEXT: OpReturnValue [[R]]291; CHECK-NEXT: OpFunctionEnd292define <3 x i1> @test_v3_ole(<3 x float> %a, <3 x float> %b) {293 %r = fcmp ole <3 x float> %a, %b294 ret <3 x i1> %r295}296 297; CHECK: [[v3UGT]] = OpFunction298; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter299; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter300; CHECK-NEXT: OpLabel301; CHECK-NEXT: [[R:%.*]] = OpFUnordGreaterThan {{%.+}} [[A]] [[B]]302; CHECK-NEXT: OpReturnValue [[R]]303; CHECK-NEXT: OpFunctionEnd304define <3 x i1> @test_v3_ugt(<3 x float> %a, <3 x float> %b) {305 %r = fcmp ugt <3 x float> %a, %b306 ret <3 x i1> %r307}308 309; CHECK: [[v3OGT]] = OpFunction310; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter311; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter312; CHECK-NEXT: OpLabel313; CHECK-NEXT: [[R:%.*]] = OpFOrdGreaterThan {{%.+}} [[A]] [[B]]314; CHECK-NEXT: OpReturnValue [[R]]315; CHECK-NEXT: OpFunctionEnd316define <3 x i1> @test_v3_ogt(<3 x float> %a, <3 x float> %b) {317 %r = fcmp ogt <3 x float> %a, %b318 ret <3 x i1> %r319}320 321; CHECK: [[v3UGE]] = OpFunction322; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter323; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter324; CHECK-NEXT: OpLabel325; CHECK-NEXT: [[R:%.*]] = OpFUnordGreaterThanEqual {{%.+}} [[A]] [[B]]326; CHECK-NEXT: OpReturnValue [[R]]327; CHECK-NEXT: OpFunctionEnd328define <3 x i1> @test_v3_uge(<3 x float> %a, <3 x float> %b) {329 %r = fcmp uge <3 x float> %a, %b330 ret <3 x i1> %r331}332 333; CHECK: [[v3OGE]] = OpFunction334; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter335; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter336; CHECK-NEXT: OpLabel337; CHECK-NEXT: [[R:%.*]] = OpFOrdGreaterThanEqual {{%.+}} [[A]] [[B]]338; CHECK-NEXT: OpReturnValue [[R]]339; CHECK-NEXT: OpFunctionEnd340define <3 x i1> @test_v3_oge(<3 x float> %a, <3 x float> %b) {341 %r = fcmp oge <3 x float> %a, %b342 ret <3 x i1> %r343}344 345; CHECK: [[v3ORD]] = OpFunction346; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter347; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter348; CHECK-NEXT: OpLabel349; CHECK-NEXT: [[R:%.*]] = OpOrdered {{%.+}} [[A]] [[B]]350; CHECK-NEXT: OpReturnValue [[R]]351; CHECK-NEXT: OpFunctionEnd352define <3 x i1> @test_v3_ord(<3 x float> %a, <3 x float> %b) {353 %r = fcmp ord <3 x float> %a, %b354 ret <3 x i1> %r355}356 357; CHECK: [[v3UNO]] = OpFunction358; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter359; CHECK-NEXT: [[B:%.*]] = OpFunctionParameter360; CHECK-NEXT: OpLabel361; CHECK-NEXT: [[R:%.*]] = OpUnordered {{%.+}} [[A]] [[B]]362; CHECK-NEXT: OpReturnValue [[R]]363; CHECK-NEXT: OpFunctionEnd364define <3 x i1> @test_v3_uno(<3 x float> %a, <3 x float> %b) {365 %r = fcmp uno <3 x float> %a, %b366 ret <3 x i1> %r367}368