1a048bf87SMark Murray; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2a048bf87SMark Murray; RUN: llc -mtriple=thumbv8.1m.main -mattr=+mve.fp -verify-machineinstrs -o - %s | FileCheck %s 3a048bf87SMark Murray 4a048bf87SMark Murraydefine arm_aapcs_vfpcc <16 x i8> @test_vornq_u8(<16 x i8> %a, <16 x i8> %b) local_unnamed_addr #0 { 5a048bf87SMark Murray; CHECK-LABEL: test_vornq_u8: 6a048bf87SMark Murray; CHECK: @ %bb.0: @ %entry 7a048bf87SMark Murray; CHECK-NEXT: vorn q0, q0, q1 8a048bf87SMark Murray; CHECK-NEXT: bx lr 9a048bf87SMark Murrayentry: 10a048bf87SMark Murray %0 = xor <16 x i8> %b, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> 11a048bf87SMark Murray %1 = or <16 x i8> %0, %a 12a048bf87SMark Murray ret <16 x i8> %1 13a048bf87SMark Murray} 14a048bf87SMark Murray 15a048bf87SMark Murraydefine arm_aapcs_vfpcc <8 x i16> @test_vornq_s16(<8 x i16> %a, <8 x i16> %b) local_unnamed_addr #0 { 16a048bf87SMark Murray; CHECK-LABEL: test_vornq_s16: 17a048bf87SMark Murray; CHECK: @ %bb.0: @ %entry 18a048bf87SMark Murray; CHECK-NEXT: vorn q0, q0, q1 19a048bf87SMark Murray; CHECK-NEXT: bx lr 20a048bf87SMark Murrayentry: 21a048bf87SMark Murray %0 = xor <8 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> 22a048bf87SMark Murray %1 = or <8 x i16> %0, %a 23a048bf87SMark Murray ret <8 x i16> %1 24a048bf87SMark Murray} 25a048bf87SMark Murray 26*228c7407SMark Murraydefine arm_aapcs_vfpcc <4 x i32> @test_vornq_u32(<4 x i32> %a, <4 x i32> %b) local_unnamed_addr #0 { 27*228c7407SMark Murray; CHECK-LABEL: test_vornq_u32: 28*228c7407SMark Murray; CHECK: @ %bb.0: @ %entry 29*228c7407SMark Murray; CHECK-NEXT: vorn q0, q0, q1 30*228c7407SMark Murray; CHECK-NEXT: bx lr 31*228c7407SMark Murrayentry: 32*228c7407SMark Murray %0 = xor <4 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1> 33*228c7407SMark Murray %1 = or <4 x i32> %0, %a 34*228c7407SMark Murray ret <4 x i32> %1 35*228c7407SMark Murray} 36*228c7407SMark Murray 37a048bf87SMark Murraydefine arm_aapcs_vfpcc <4 x float> @test_vornq_f32(<4 x float> %a, <4 x float> %b) local_unnamed_addr #0 { 38a048bf87SMark Murray; CHECK-LABEL: test_vornq_f32: 39a048bf87SMark Murray; CHECK: @ %bb.0: @ %entry 40a048bf87SMark Murray; CHECK-NEXT: vorn q0, q0, q1 41a048bf87SMark Murray; CHECK-NEXT: bx lr 42a048bf87SMark Murrayentry: 43a048bf87SMark Murray %0 = bitcast <4 x float> %a to <4 x i32> 44a048bf87SMark Murray %1 = bitcast <4 x float> %b to <4 x i32> 45a048bf87SMark Murray %2 = xor <4 x i32> %1, <i32 -1, i32 -1, i32 -1, i32 -1> 46a048bf87SMark Murray %3 = or <4 x i32> %2, %0 47a048bf87SMark Murray %4 = bitcast <4 x i32> %3 to <4 x float> 48a048bf87SMark Murray ret <4 x float> %4 49a048bf87SMark Murray} 50a048bf87SMark Murray 51a048bf87SMark Murraydefine arm_aapcs_vfpcc <16 x i8> @test_vornq_m_s8(<16 x i8> %inactive, <16 x i8> %a, <16 x i8> %b, i16 zeroext %p) local_unnamed_addr #1 { 52a048bf87SMark Murray; CHECK-LABEL: test_vornq_m_s8: 53a048bf87SMark Murray; CHECK: @ %bb.0: @ %entry 54a048bf87SMark Murray; CHECK-NEXT: vmsr p0, r0 55a048bf87SMark Murray; CHECK-NEXT: vpst 56a048bf87SMark Murray; CHECK-NEXT: vornt q0, q1, q2 57a048bf87SMark Murray; CHECK-NEXT: bx lr 58a048bf87SMark Murrayentry: 59a048bf87SMark Murray %0 = zext i16 %p to i32 60a048bf87SMark Murray %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0) 61a048bf87SMark Murray %2 = tail call <16 x i8> @llvm.arm.mve.orn.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i8> %b, <16 x i1> %1, <16 x i8> %inactive) 62a048bf87SMark Murray ret <16 x i8> %2 63a048bf87SMark Murray} 64a048bf87SMark Murray 65a048bf87SMark Murraydeclare <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32) #2 66a048bf87SMark Murray 67a048bf87SMark Murraydeclare <16 x i8> @llvm.arm.mve.orn.predicated.v16i8.v16i1(<16 x i8>, <16 x i8>, <16 x i1>, <16 x i8>) #2 68a048bf87SMark Murray 69a048bf87SMark Murraydefine arm_aapcs_vfpcc <8 x i16> @test_vornq_m_u16(<8 x i16> %inactive, <8 x i16> %a, <8 x i16> %b, i16 zeroext %p) local_unnamed_addr #1 { 70a048bf87SMark Murray; CHECK-LABEL: test_vornq_m_u16: 71a048bf87SMark Murray; CHECK: @ %bb.0: @ %entry 72a048bf87SMark Murray; CHECK-NEXT: vmsr p0, r0 73a048bf87SMark Murray; CHECK-NEXT: vpst 74a048bf87SMark Murray; CHECK-NEXT: vornt q0, q1, q2 75a048bf87SMark Murray; CHECK-NEXT: bx lr 76a048bf87SMark Murrayentry: 77a048bf87SMark Murray %0 = zext i16 %p to i32 78a048bf87SMark Murray %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 79a048bf87SMark Murray %2 = tail call <8 x i16> @llvm.arm.mve.orn.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i16> %b, <8 x i1> %1, <8 x i16> %inactive) 80a048bf87SMark Murray ret <8 x i16> %2 81a048bf87SMark Murray} 82a048bf87SMark Murray 83a048bf87SMark Murraydeclare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32) #2 84a048bf87SMark Murray 85a048bf87SMark Murraydeclare <8 x i16> @llvm.arm.mve.orn.predicated.v8i16.v8i1(<8 x i16>, <8 x i16>, <8 x i1>, <8 x i16>) #2 86a048bf87SMark Murray 87*228c7407SMark Murraydefine arm_aapcs_vfpcc <4 x i32> @test_vornq_m_s32(<4 x i32> %inactive, <4 x i32> %a, <4 x i32> %b, i16 zeroext %p) local_unnamed_addr #1 { 88*228c7407SMark Murray; CHECK-LABEL: test_vornq_m_s32: 89a048bf87SMark Murray; CHECK: @ %bb.0: @ %entry 90a048bf87SMark Murray; CHECK-NEXT: vmsr p0, r0 91a048bf87SMark Murray; CHECK-NEXT: vpst 92a048bf87SMark Murray; CHECK-NEXT: vornt q0, q1, q2 93a048bf87SMark Murray; CHECK-NEXT: bx lr 94a048bf87SMark Murrayentry: 95*228c7407SMark Murray %0 = zext i16 %p to i32 96*228c7407SMark Murray %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 97*228c7407SMark Murray %2 = tail call <4 x i32> @llvm.arm.mve.orn.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i1> %1, <4 x i32> %inactive) 98*228c7407SMark Murray ret <4 x i32> %2 99a048bf87SMark Murray} 100a048bf87SMark Murray 101a048bf87SMark Murraydeclare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32) #2 102a048bf87SMark Murray 103a048bf87SMark Murraydeclare <4 x i32> @llvm.arm.mve.orn.predicated.v4i32.v4i1(<4 x i32>, <4 x i32>, <4 x i1>, <4 x i32>) #2 104*228c7407SMark Murray 105*228c7407SMark Murraydefine arm_aapcs_vfpcc <8 x half> @test_vornq_m_f16(<8 x half> %inactive, <8 x half> %a, <8 x half> %b, i16 zeroext %p) local_unnamed_addr #1 { 106*228c7407SMark Murray; CHECK-LABEL: test_vornq_m_f16: 107*228c7407SMark Murray; CHECK: @ %bb.0: @ %entry 108*228c7407SMark Murray; CHECK-NEXT: vmsr p0, r0 109*228c7407SMark Murray; CHECK-NEXT: vpst 110*228c7407SMark Murray; CHECK-NEXT: vornt q0, q1, q2 111*228c7407SMark Murray; CHECK-NEXT: bx lr 112*228c7407SMark Murrayentry: 113*228c7407SMark Murray %0 = bitcast <8 x half> %a to <8 x i16> 114*228c7407SMark Murray %1 = bitcast <8 x half> %b to <8 x i16> 115*228c7407SMark Murray %2 = zext i16 %p to i32 116*228c7407SMark Murray %3 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %2) 117*228c7407SMark Murray %4 = bitcast <8 x half> %inactive to <8 x i16> 118*228c7407SMark Murray %5 = tail call <8 x i16> @llvm.arm.mve.orn.predicated.v8i16.v8i1(<8 x i16> %0, <8 x i16> %1, <8 x i1> %3, <8 x i16> %4) 119*228c7407SMark Murray %6 = bitcast <8 x i16> %5 to <8 x half> 120*228c7407SMark Murray ret <8 x half> %6 121*228c7407SMark Murray} 122*228c7407SMark Murray 123*228c7407SMark Murraydefine arm_aapcs_vfpcc <16 x i8> @test_vornq_x_u8(<16 x i8> %a, <16 x i8> %b, i16 zeroext %p) local_unnamed_addr #1 { 124*228c7407SMark Murray; CHECK-LABEL: test_vornq_x_u8: 125*228c7407SMark Murray; CHECK: @ %bb.0: @ %entry 126*228c7407SMark Murray; CHECK-NEXT: vmsr p0, r0 127*228c7407SMark Murray; CHECK-NEXT: vpst 128*228c7407SMark Murray; CHECK-NEXT: vornt q0, q0, q1 129*228c7407SMark Murray; CHECK-NEXT: bx lr 130*228c7407SMark Murrayentry: 131*228c7407SMark Murray %0 = zext i16 %p to i32 132*228c7407SMark Murray %1 = tail call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %0) 133*228c7407SMark Murray %2 = tail call <16 x i8> @llvm.arm.mve.orn.predicated.v16i8.v16i1(<16 x i8> %a, <16 x i8> %b, <16 x i1> %1, <16 x i8> undef) 134*228c7407SMark Murray ret <16 x i8> %2 135*228c7407SMark Murray} 136*228c7407SMark Murray 137*228c7407SMark Murraydefine arm_aapcs_vfpcc <8 x i16> @test_vornq_x_s16(<8 x i16> %a, <8 x i16> %b, i16 zeroext %p) local_unnamed_addr #1 { 138*228c7407SMark Murray; CHECK-LABEL: test_vornq_x_s16: 139*228c7407SMark Murray; CHECK: @ %bb.0: @ %entry 140*228c7407SMark Murray; CHECK-NEXT: vmsr p0, r0 141*228c7407SMark Murray; CHECK-NEXT: vpst 142*228c7407SMark Murray; CHECK-NEXT: vornt q0, q0, q1 143*228c7407SMark Murray; CHECK-NEXT: bx lr 144*228c7407SMark Murrayentry: 145*228c7407SMark Murray %0 = zext i16 %p to i32 146*228c7407SMark Murray %1 = tail call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %0) 147*228c7407SMark Murray %2 = tail call <8 x i16> @llvm.arm.mve.orn.predicated.v8i16.v8i1(<8 x i16> %a, <8 x i16> %b, <8 x i1> %1, <8 x i16> undef) 148*228c7407SMark Murray ret <8 x i16> %2 149*228c7407SMark Murray} 150*228c7407SMark Murray 151*228c7407SMark Murraydefine arm_aapcs_vfpcc <4 x i32> @test_vornq_x_u32(<4 x i32> %a, <4 x i32> %b, i16 zeroext %p) local_unnamed_addr #1 { 152*228c7407SMark Murray; CHECK-LABEL: test_vornq_x_u32: 153*228c7407SMark Murray; CHECK: @ %bb.0: @ %entry 154*228c7407SMark Murray; CHECK-NEXT: vmsr p0, r0 155*228c7407SMark Murray; CHECK-NEXT: vpst 156*228c7407SMark Murray; CHECK-NEXT: vornt q0, q0, q1 157*228c7407SMark Murray; CHECK-NEXT: bx lr 158*228c7407SMark Murrayentry: 159*228c7407SMark Murray %0 = zext i16 %p to i32 160*228c7407SMark Murray %1 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %0) 161*228c7407SMark Murray %2 = tail call <4 x i32> @llvm.arm.mve.orn.predicated.v4i32.v4i1(<4 x i32> %a, <4 x i32> %b, <4 x i1> %1, <4 x i32> undef) 162*228c7407SMark Murray ret <4 x i32> %2 163*228c7407SMark Murray} 164*228c7407SMark Murray 165*228c7407SMark Murraydefine arm_aapcs_vfpcc <4 x float> @test_vornq_m_f32(<4 x float> %a, <4 x float> %b, i16 zeroext %p) local_unnamed_addr #1 { 166*228c7407SMark Murray; CHECK-LABEL: test_vornq_m_f32: 167*228c7407SMark Murray; CHECK: @ %bb.0: @ %entry 168*228c7407SMark Murray; CHECK-NEXT: vmsr p0, r0 169*228c7407SMark Murray; CHECK-NEXT: vpst 170*228c7407SMark Murray; CHECK-NEXT: vornt q0, q0, q1 171*228c7407SMark Murray; CHECK-NEXT: bx lr 172*228c7407SMark Murrayentry: 173*228c7407SMark Murray %0 = bitcast <4 x float> %a to <4 x i32> 174*228c7407SMark Murray %1 = bitcast <4 x float> %b to <4 x i32> 175*228c7407SMark Murray %2 = zext i16 %p to i32 176*228c7407SMark Murray %3 = tail call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %2) 177*228c7407SMark Murray %4 = tail call <4 x i32> @llvm.arm.mve.orn.predicated.v4i32.v4i1(<4 x i32> %0, <4 x i32> %1, <4 x i1> %3, <4 x i32> undef) 178*228c7407SMark Murray %5 = bitcast <4 x i32> %4 to <4 x float> 179*228c7407SMark Murray ret <4 x float> %5 180*228c7407SMark Murray} 181*228c7407SMark Murray 182