303 lines · plain
1; RUN: llc < %s -mtriple=arm-eabi -mattr=+v8.2a,+neon,+fullfp16 -float-abi=hard | FileCheck %s2; RUN: llc < %s -mtriple=thumbv7a -mattr=+v8.2a,+neon,+fullfp16 -float-abi=hard | FileCheck %s3 4; 4-element vector5 6; Ordered7 8define <4 x half> @test1(<4 x half> %A, <4 x half> %B) {9; CHECK-LABEL: test1:10; CHECK: vmaxnm.f16 d0, d0, d111; CHECK-NEXT: bx lr12 %tmp3 = fcmp fast ogt <4 x half> %A, %B13 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B14 ret <4 x half> %tmp415}16 17define <4 x half> @test2(<4 x half> %A, <4 x half> %B) {18; CHECK-LABEL: test2:19; CHECK: vminnm.f16 d0, d0, d120; CHECK-NEXT: bx lr21 %tmp3 = fcmp fast ogt <4 x half> %A, %B22 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A23 ret <4 x half> %tmp424}25 26define <4 x half> @test3(<4 x half> %A, <4 x half> %B) {27; CHECK-LABEL: test3:28; CHECK: vminnm.f16 d0, d0, d129; CHECK-NEXT: bx lr30 %tmp3 = fcmp fast oge <4 x half> %A, %B31 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A32 ret <4 x half> %tmp433}34 35define <4 x half> @test4(<4 x half> %A, <4 x half> %B) {36; CHECK-LABEL: test4:37; CHECK: vmaxnm.f16 d0, d0, d138; CHECK-NEXT: bx lr39 %tmp3 = fcmp fast oge <4 x half> %A, %B40 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B41 ret <4 x half> %tmp442}43 44define <4 x half> @test5(<4 x half> %A, <4 x half> %B) {45; CHECK-LABEL: test5:46; CHECK: vminnm.f16 d0, d0, d147; CHECK-NEXT: bx lr48 %tmp3 = fcmp fast olt <4 x half> %A, %B49 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B50 ret <4 x half> %tmp451}52 53define <4 x half> @test6(<4 x half> %A, <4 x half> %B) {54; CHECK-LABEL: test6:55; CHECK: vmaxnm.f16 d0, d0, d156; CHECK-NEXT: bx lr57 %tmp3 = fcmp fast olt <4 x half> %A, %B58 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A59 ret <4 x half> %tmp460}61 62define <4 x half> @test7(<4 x half> %A, <4 x half> %B) {63; CHECK-LABEL: test7:64; CHECK: vminnm.f16 d0, d0, d165; CHECK-NEXT: bx lr66 %tmp3 = fcmp fast ole <4 x half> %A, %B67 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B68 ret <4 x half> %tmp469}70 71define <4 x half> @test8(<4 x half> %A, <4 x half> %B) {72; CHECK-LABEL: test8:73; CHECK: vmaxnm.f16 d0, d0, d174; CHECK-NEXT: bx lr75 %tmp3 = fcmp fast ole <4 x half> %A, %B76 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A77 ret <4 x half> %tmp478}79 80; Unordered81 82define <4 x half> @test11(<4 x half> %A, <4 x half> %B) {83; CHECK-LABEL: test11:84; CHECK: vmaxnm.f16 d0, d0, d185; CHECK-NEXT: bx lr86 %tmp3 = fcmp fast ugt <4 x half> %A, %B87 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B88 ret <4 x half> %tmp489}90 91define <4 x half> @test12(<4 x half> %A, <4 x half> %B) {92; CHECK-LABEL: test12:93; CHECK: vminnm.f16 d0, d0, d194; CHECK-NEXT: bx lr95 %tmp3 = fcmp fast ugt <4 x half> %A, %B96 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A97 ret <4 x half> %tmp498}99 100define <4 x half> @test13(<4 x half> %A, <4 x half> %B) {101; CHECK-LABEL: test13:102; CHECK: vminnm.f16 d0, d0, d1103; CHECK-NEXT: bx lr104 %tmp3 = fcmp fast uge <4 x half> %A, %B105 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A106 ret <4 x half> %tmp4107}108 109define <4 x half> @test14(<4 x half> %A, <4 x half> %B) {110; CHECK-LABEL: test14:111; CHECK: vmaxnm.f16 d0, d0, d1112; CHECK-NEXT: bx lr113 %tmp3 = fcmp fast uge <4 x half> %A, %B114 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B115 ret <4 x half> %tmp4116}117 118define <4 x half> @test15(<4 x half> %A, <4 x half> %B) {119; CHECK-LABEL: test15:120; CHECK: vminnm.f16 d0, d0, d1121; CHECK-NEXT: bx lr122 %tmp3 = fcmp fast ult <4 x half> %A, %B123 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B124 ret <4 x half> %tmp4125}126 127define <4 x half> @test16(<4 x half> %A, <4 x half> %B) {128; CHECK-LABEL: test16:129; CHECK: vmaxnm.f16 d0, d0, d1130; CHECK-NEXT: bx lr131 %tmp3 = fcmp fast ult <4 x half> %A, %B132 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A133 ret <4 x half> %tmp4134}135 136define <4 x half> @test17(<4 x half> %A, <4 x half> %B) {137; CHECK-LABEL: test17:138; CHECK: vminnm.f16 d0, d0, d1139; CHECK-NEXT: bx lr140 %tmp3 = fcmp fast ule <4 x half> %A, %B141 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %A, <4 x half> %B142 ret <4 x half> %tmp4143}144 145define <4 x half> @test18(<4 x half> %A, <4 x half> %B) {146; CHECK-LABEL: test18:147; CHECK: vmaxnm.f16 d0, d0, d1148; CHECK-NEXT: bx lr149 %tmp3 = fcmp fast ule <4 x half> %A, %B150 %tmp4 = select nsz <4 x i1> %tmp3, <4 x half> %B, <4 x half> %A151 ret <4 x half> %tmp4152}153 154; 8-element vector155 156; Ordered157 158define <8 x half> @test201(<8 x half> %A, <8 x half> %B) {159; CHECK-LABEL: test201:160; CHECK: vmaxnm.f16 q0, q0, q1161; CHECK-NEXT: bx lr162 %tmp3 = fcmp fast ogt <8 x half> %A, %B163 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B164 ret <8 x half> %tmp4165}166 167define <8 x half> @test202(<8 x half> %A, <8 x half> %B) {168; CHECK-LABEL: test202:169; CHECK: vminnm.f16 q0, q0, q1170; CHECK-NEXT: bx lr171 %tmp3 = fcmp fast ogt <8 x half> %A, %B172 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A173 ret <8 x half> %tmp4174}175 176define <8 x half> @test203(<8 x half> %A, <8 x half> %B) {177; CHECK-LABEL: test203:178; CHECK: vmaxnm.f16 q0, q0, q1179; CHECK-NEXT: bx lr180 %tmp3 = fcmp fast oge <8 x half> %A, %B181 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B182 ret <8 x half> %tmp4183}184 185define <8 x half> @test204(<8 x half> %A, <8 x half> %B) {186; CHECK-LABEL: test204:187; CHECK: vminnm.f16 q0, q0, q1188; CHECK-NEXT: bx lr189 %tmp3 = fcmp fast oge <8 x half> %A, %B190 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A191 ret <8 x half> %tmp4192}193 194define <8 x half> @test205(<8 x half> %A, <8 x half> %B) {195; CHECK-LABEL: test205:196; CHECK: vminnm.f16 q0, q0, q1197; CHECK-NEXT: bx lr198 %tmp3 = fcmp fast olt <8 x half> %A, %B199 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B200 ret <8 x half> %tmp4201}202 203define <8 x half> @test206(<8 x half> %A, <8 x half> %B) {204; CHECK-LABEL: test206:205; CHECK: vmaxnm.f16 q0, q0, q1206; CHECK-NEXT: bx lr207 %tmp3 = fcmp fast olt <8 x half> %A, %B208 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A209 ret <8 x half> %tmp4210}211 212define <8 x half> @test207(<8 x half> %A, <8 x half> %B) {213; CHECK-LABEL: test207:214; CHECK: vminnm.f16 q0, q0, q1215; CHECK-NEXT: bx lr216 %tmp3 = fcmp fast ole <8 x half> %A, %B217 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B218 ret <8 x half> %tmp4219}220 221define <8 x half> @test208(<8 x half> %A, <8 x half> %B) {222; CHECK-LABEL: test208:223; CHECK: vmaxnm.f16 q0, q0, q1224; CHECK-NEXT: bx lr225 %tmp3 = fcmp fast ole <8 x half> %A, %B226 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A227 ret <8 x half> %tmp4228}229 230; Unordered231 232define <8 x half> @test209(<8 x half> %A, <8 x half> %B) {233; CHECK-LABEL: test209:234; CHECK: vmaxnm.f16 q0, q0, q1235; CHECK-NEXT: bx lr236 %tmp3 = fcmp fast ugt <8 x half> %A, %B237 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B238 ret <8 x half> %tmp4239}240 241define <8 x half> @test210(<8 x half> %A, <8 x half> %B) {242; CHECK-LABEL: test210:243; CHECK: vminnm.f16 q0, q0, q1244; CHECK-NEXT: bx lr245 %tmp3 = fcmp fast ugt <8 x half> %A, %B246 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A247 ret <8 x half> %tmp4248}249 250define <8 x half> @test211(<8 x half> %A, <8 x half> %B) {251; CHECK-LABEL: test211:252; CHECK: vmaxnm.f16 q0, q0, q1253; CHECK-NEXT: bx lr254 %tmp3 = fcmp fast uge <8 x half> %A, %B255 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B256 ret <8 x half> %tmp4257}258 259define <8 x half> @test214(<8 x half> %A, <8 x half> %B) {260; CHECK-LABEL: test214:261; CHECK: vminnm.f16 q0, q0, q1262; CHECK-NEXT: bx lr263 %tmp3 = fcmp fast uge <8 x half> %A, %B264 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A265 ret <8 x half> %tmp4266}267 268define <8 x half> @test215(<8 x half> %A, <8 x half> %B) {269; CHECK-LABEL: test215:270; CHECK: vminnm.f16 q0, q0, q1271; CHECK-NEXT: bx lr272 %tmp3 = fcmp fast ult <8 x half> %A, %B273 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B274 ret <8 x half> %tmp4275}276 277define <8 x half> @test216(<8 x half> %A, <8 x half> %B) {278; CHECK-LABEL: test216:279; CHECK: vmaxnm.f16 q0, q0, q1280; CHECK-NEXT: bx lr281 %tmp3 = fcmp fast ult <8 x half> %A, %B282 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A283 ret <8 x half> %tmp4284}285 286define <8 x half> @test217(<8 x half> %A, <8 x half> %B) {287; CHECK-LABEL: test217:288; CHECK: vminnm.f16 q0, q0, q1289; CHECK-NEXT: bx lr290 %tmp3 = fcmp fast ule <8 x half> %A, %B291 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %A, <8 x half> %B292 ret <8 x half> %tmp4293}294 295define <8 x half> @test218(<8 x half> %A, <8 x half> %B) {296; CHECK-LABEL: test218:297; CHECK: vmaxnm.f16 q0, q0, q1298; CHECK-NEXT: bx lr299 %tmp3 = fcmp fast ule <8 x half> %A, %B300 %tmp4 = select nsz <8 x i1> %tmp3, <8 x half> %B, <8 x half> %A301 ret <8 x half> %tmp4302}303