261 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=thumbv8.1m.main-none-eabi -mattr=+mve -run-pass arm-mve-vpt %s -o - | FileCheck %s3 4--- |5 6 define arm_aapcs_vfpcc <4 x i32> @vpnot(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {7 entry:8 %0 = icmp slt <4 x i32> %a, zeroinitializer9 %c2 = icmp sgt <4 x i32> %b, zeroinitializer10 %c3 = icmp eq <4 x i32> %c, zeroinitializer11 %o1 = and <4 x i1> %0, %c212 %o2 = xor <4 x i1> %o1, <i1 true, i1 true, i1 true, i1 true>13 %o = and <4 x i1> %c3, %o214 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b15 ret <4 x i32> %s16 }17 18 define arm_aapcs_vfpcc <4 x i32> @vpnot_end(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {19 entry:20 %0 = icmp slt <4 x i32> %a, zeroinitializer21 %c2 = icmp sgt <4 x i32> %b, zeroinitializer22 %c3 = icmp eq <4 x i32> %c, zeroinitializer23 %o1 = and <4 x i1> %0, %c224 %o2 = xor <4 x i1> %o1, <i1 true, i1 true, i1 true, i1 true>25 br label %bb226 bb2:27 %o = and <4 x i1> %c3, %o228 %s = select <4 x i1> %o, <4 x i32> %a, <4 x i32> %b29 ret <4 x i32> %s30 }31 32 define arm_aapcs_vfpcc <4 x i32> @vpnot_two(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {33 entry:34 unreachable35 }36 define arm_aapcs_vfpcc <4 x i32> @vpnot_lots(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {37 entry:38 unreachable39 }40 define arm_aapcs_vfpcc <4 x i32> @vpnot_first(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {41 entry:42 unreachable43 }44 define arm_aapcs_vfpcc <4 x i32> @vpnot_many(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {45 entry:46 unreachable47 }48 49...50---51name: vpnot52alignment: 453tracksRegLiveness: true54liveins:55 - { reg: '$q0', virtual-reg: '' }56 - { reg: '$q1', virtual-reg: '' }57 - { reg: '$q2', virtual-reg: '' }58body: |59 bb.0.entry:60 liveins: $q0, $q1, $q261 62 ; CHECK-LABEL: name: vpnot63 ; CHECK: liveins: $q0, $q1, $q264 ; CHECK: BUNDLE implicit-def $vpr, implicit $q0, implicit $zr, implicit $q1, implicit killed $q2 {65 ; CHECK: MVE_VPTv4s32r 12, renamable $q0, $zr, 11, implicit-def $vpr66 ; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, internal killed renamable $vpr, $noreg67 ; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 2, internal killed renamable $vpr, $noreg68 ; CHECK: }69 ; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg70 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $q071 renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg, $noreg72 renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr, $noreg73 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg74 renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr, $noreg75 renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg76 tBX_RET 14, $noreg, implicit $q077 78...79---80name: vpnot_end81alignment: 482tracksRegLiveness: true83liveins:84 - { reg: '$q0', virtual-reg: '' }85 - { reg: '$q1', virtual-reg: '' }86 - { reg: '$q2', virtual-reg: '' }87body: |88 ; CHECK-LABEL: name: vpnot_end89 ; CHECK: bb.0.entry:90 ; CHECK: successors: %bb.1(0x80000000)91 ; CHECK: liveins: $q0, $q1, $q292 ; CHECK: BUNDLE implicit-def $vpr, implicit $q0, implicit $zr, implicit $q1 {93 ; CHECK: MVE_VPTv4s32r 8, renamable $q0, $zr, 11, implicit-def $vpr94 ; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, internal killed renamable $vpr, $noreg95 ; CHECK: }96 ; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg97 ; CHECK: bb.1.bb2:98 ; CHECK: liveins: $q0, $q1, $q2, $vpr99 ; CHECK: BUNDLE implicit-def $vpr, implicit killed $vpr, implicit killed $q2, implicit $zr {100 ; CHECK: MVE_VPST 8, implicit $vpr101 ; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr, $noreg102 ; CHECK: }103 ; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg104 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $q0105 bb.0.entry:106 liveins: $q0, $q1, $q2107 108 renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg, $noreg109 renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr, $noreg110 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg111 112 bb.1.bb2:113 liveins: $q0, $q1, $q2, $vpr114 115 renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr, $noreg116 renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg117 tBX_RET 14, $noreg, implicit $q0118 119...120---121name: vpnot_two122alignment: 4123tracksRegLiveness: true124liveins:125 - { reg: '$q0', virtual-reg: '' }126 - { reg: '$q1', virtual-reg: '' }127 - { reg: '$q2', virtual-reg: '' }128body: |129 bb.0.entry:130 liveins: $q0, $q1, $q2131 132 ; CHECK-LABEL: name: vpnot_two133 ; CHECK: liveins: $q0, $q1, $q2134 ; CHECK: BUNDLE implicit-def $vpr, implicit $q0, implicit $zr, implicit $q1 {135 ; CHECK: MVE_VPTv4s32r 8, renamable $q0, $zr, 11, implicit-def $vpr136 ; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, internal killed renamable $vpr, $noreg137 ; CHECK: }138 ; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg139 ; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg140 ; CHECK: BUNDLE implicit-def $vpr, implicit killed $vpr, implicit killed $q2, implicit $zr {141 ; CHECK: MVE_VPST 8, implicit $vpr142 ; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr, $noreg143 ; CHECK: }144 ; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg145 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $q0146 renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg, $noreg147 renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr, $noreg148 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg149 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg150 renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr, $noreg151 renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg152 tBX_RET 14, $noreg, implicit $q0153 154...155---156name: vpnot_lots157alignment: 4158tracksRegLiveness: true159liveins:160 - { reg: '$q0', virtual-reg: '' }161 - { reg: '$q1', virtual-reg: '' }162 - { reg: '$q2', virtual-reg: '' }163body: |164 bb.0.entry:165 liveins: $q0, $q1, $q2166 167 ; CHECK-LABEL: name: vpnot_lots168 ; CHECK: liveins: $q0, $q1, $q2169 ; CHECK: BUNDLE implicit-def $vpr, implicit $q0, implicit $zr, implicit $q1 {170 ; CHECK: MVE_VPTv4s32r 8, renamable $q0, $zr, 11, implicit-def $vpr171 ; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, internal killed renamable $vpr, $noreg172 ; CHECK: }173 ; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg174 ; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg175 ; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg176 ; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg177 ; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg178 ; CHECK: BUNDLE implicit-def $vpr, implicit killed $vpr, implicit killed $q2, implicit $zr {179 ; CHECK: MVE_VPST 8, implicit $vpr180 ; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr, $noreg181 ; CHECK: }182 ; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg183 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $q0184 renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg, $noreg185 renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr, $noreg186 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg187 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg188 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg189 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg190 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg191 renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr, $noreg192 renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg193 tBX_RET 14, $noreg, implicit $q0194 195...196---197name: vpnot_first198alignment: 4199tracksRegLiveness: true200liveins:201 - { reg: '$q0', virtual-reg: '' }202 - { reg: '$q1', virtual-reg: '' }203 - { reg: '$q2', virtual-reg: '' }204body: |205 bb.0.entry:206 liveins: $q0, $q1, $q2207 208 ; CHECK-LABEL: name: vpnot_first209 ; CHECK: liveins: $q0, $q1, $q2210 ; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg, $noreg211 ; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg212 ; CHECK: BUNDLE implicit-def $vpr, implicit killed $vpr, implicit $q1, implicit $zr, implicit killed $q2 {213 ; CHECK: MVE_VPST 4, implicit $vpr214 ; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr, $noreg215 ; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, internal killed renamable $vpr, $noreg216 ; CHECK: }217 ; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg218 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $q0219 renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg, $noreg220 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg221 renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr, $noreg222 renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr, $noreg223 renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg224 tBX_RET 14, $noreg, implicit $q0225 226...227---228name: vpnot_many229alignment: 4230tracksRegLiveness: true231liveins:232 - { reg: '$q0', virtual-reg: '' }233 - { reg: '$q1', virtual-reg: '' }234 - { reg: '$q2', virtual-reg: '' }235body: |236 bb.0.entry:237 liveins: $q0, $q1, $q2238 239 ; CHECK-LABEL: name: vpnot_many240 ; CHECK: liveins: $q0, $q1, $q2241 ; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg, $noreg242 ; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg243 ; CHECK: BUNDLE implicit-def $vpr, implicit killed $vpr, implicit $q1, implicit $zr, implicit killed $q2 {244 ; CHECK: MVE_VPST 12, implicit $vpr245 ; CHECK: renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr, $noreg246 ; CHECK: renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 2, internal killed renamable $vpr, $noreg247 ; CHECK: }248 ; CHECK: renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg249 ; CHECK: renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg250 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $q0251 renamable $vpr = MVE_VCMPs32r renamable $q0, $zr, 11, 0, $noreg, $noreg252 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg253 renamable $vpr = MVE_VCMPs32r renamable $q1, $zr, 12, 1, killed renamable $vpr, $noreg254 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg255 renamable $vpr = MVE_VCMPi32r killed renamable $q2, $zr, 0, 1, killed renamable $vpr, $noreg256 renamable $vpr = MVE_VPNOT killed renamable $vpr, 0, $noreg, $noreg257 renamable $q0 = MVE_VPSEL killed renamable $q0, killed renamable $q1, 0, killed renamable $vpr, $noreg258 tBX_RET 14, $noreg, implicit $q0259 260...261