1*9880d681SAndroid Build Coastguard Worker# RUN: llc -march=amdgcn -run-pass detect-dead-lanes -o - %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker--- | 3*9880d681SAndroid Build Coastguard Worker define void @test0() { ret void } 4*9880d681SAndroid Build Coastguard Worker define void @test1() { ret void } 5*9880d681SAndroid Build Coastguard Worker define void @test2() { ret void } 6*9880d681SAndroid Build Coastguard Worker define void @test3() { ret void } 7*9880d681SAndroid Build Coastguard Worker define void @test4() { ret void } 8*9880d681SAndroid Build Coastguard Worker define void @test5() { ret void } 9*9880d681SAndroid Build Coastguard Worker define void @loop0() { ret void } 10*9880d681SAndroid Build Coastguard Worker define void @loop1() { ret void } 11*9880d681SAndroid Build Coastguard Worker define void @loop2() { ret void } 12*9880d681SAndroid Build Coastguard Worker... 13*9880d681SAndroid Build Coastguard Worker--- 14*9880d681SAndroid Build Coastguard Worker# Combined use/def transfer check, the basics. 15*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: test0 16*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %0 17*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %1 18*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def dead %2 19*9880d681SAndroid Build Coastguard Worker# CHECK: %3 = REG_SEQUENCE %0, {{[0-9]+}}, %1, {{[0-9]+}}, undef %2, {{[0-9]+}} 20*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %3:sub0 21*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %3:sub1 22*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %3:sub2 23*9880d681SAndroid Build Coastguard Worker# CHECK: %4 = COPY %3:sub0_sub1 24*9880d681SAndroid Build Coastguard Worker# CHECK: %5 = COPY undef %3:sub2_sub3 25*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %4:sub0 26*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %4:sub1 27*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %5:sub0 28*9880d681SAndroid Build Coastguard Workername: test0 29*9880d681SAndroid Build Coastguard WorkerisSSA: true 30*9880d681SAndroid Build Coastguard Workerregisters: 31*9880d681SAndroid Build Coastguard Worker - { id: 0, class: sreg_32 } 32*9880d681SAndroid Build Coastguard Worker - { id: 1, class: sreg_32 } 33*9880d681SAndroid Build Coastguard Worker - { id: 2, class: sreg_32 } 34*9880d681SAndroid Build Coastguard Worker - { id: 3, class: sreg_128 } 35*9880d681SAndroid Build Coastguard Worker - { id: 4, class: sreg_64 } 36*9880d681SAndroid Build Coastguard Worker - { id: 5, class: sreg_64 } 37*9880d681SAndroid Build Coastguard Workerbody: | 38*9880d681SAndroid Build Coastguard Worker bb.0: 39*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %0 40*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %1 41*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %2 42*9880d681SAndroid Build Coastguard Worker %3 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1, %2, %subreg.sub3 43*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %3:sub0 44*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %3:sub1 45*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %3:sub2 46*9880d681SAndroid Build Coastguard Worker %4 = COPY %3:sub0_sub1 47*9880d681SAndroid Build Coastguard Worker %5 = COPY %3:sub2_sub3 48*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %4:sub0 49*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %4:sub1 50*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %5:sub0 51*9880d681SAndroid Build Coastguard Worker... 52*9880d681SAndroid Build Coastguard Worker--- 53*9880d681SAndroid Build Coastguard Worker# Check defined lanes transfer; Includes checking for some special cases like 54*9880d681SAndroid Build Coastguard Worker# undef operands or IMPLICIT_DEF definitions. 55*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: test1 56*9880d681SAndroid Build Coastguard Worker# CHECK: %0 = REG_SEQUENCE %sgpr0, {{[0-9]+}}, %sgpr0, {{[0-9]+}} 57*9880d681SAndroid Build Coastguard Worker# CHECK: %1 = INSERT_SUBREG %0, %sgpr1, {{[0-9]+}} 58*9880d681SAndroid Build Coastguard Worker# CHECK: %2 = INSERT_SUBREG %0:sub2_sub3, %sgpr42, {{[0-9]+}} 59*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %1:sub0 60*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %1:sub1 61*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %1:sub2 62*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %1:sub3 63*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %2:sub0 64*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %2:sub1 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker# CHECK: %3 = IMPLICIT_DEF 67*9880d681SAndroid Build Coastguard Worker# CHECK: %4 = INSERT_SUBREG %0, undef %3, {{[0-9]+}} 68*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %4:sub0 69*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %4:sub1 70*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %4:sub2 71*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %4:sub3 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker# CHECK: %5 = EXTRACT_SUBREG %0, {{[0-9]+}} 74*9880d681SAndroid Build Coastguard Worker# CHECK: %6 = EXTRACT_SUBREG %5, {{[0-9]+}} 75*9880d681SAndroid Build Coastguard Worker# CHECK: %7 = EXTRACT_SUBREG %5, {{[0-9]+}} 76*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %5 77*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %6 78*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %7 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker# CHECK: %8 = IMPLICIT_DEF 81*9880d681SAndroid Build Coastguard Worker# CHECK: %9 = EXTRACT_SUBREG undef %8, {{[0-9]+}} 82*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %9 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker# CHECK: %10 = EXTRACT_SUBREG undef %0, {{[0-9]+}} 85*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %10 86*9880d681SAndroid Build Coastguard Workername: test1 87*9880d681SAndroid Build Coastguard WorkerisSSA: true 88*9880d681SAndroid Build Coastguard Workerregisters: 89*9880d681SAndroid Build Coastguard Worker - { id: 0, class: sreg_128 } 90*9880d681SAndroid Build Coastguard Worker - { id: 1, class: sreg_128 } 91*9880d681SAndroid Build Coastguard Worker - { id: 2, class: sreg_64 } 92*9880d681SAndroid Build Coastguard Worker - { id: 3, class: sreg_32 } 93*9880d681SAndroid Build Coastguard Worker - { id: 4, class: sreg_128 } 94*9880d681SAndroid Build Coastguard Worker - { id: 5, class: sreg_64 } 95*9880d681SAndroid Build Coastguard Worker - { id: 6, class: sreg_32 } 96*9880d681SAndroid Build Coastguard Worker - { id: 7, class: sreg_32 } 97*9880d681SAndroid Build Coastguard Worker - { id: 8, class: sreg_64 } 98*9880d681SAndroid Build Coastguard Worker - { id: 9, class: sreg_32 } 99*9880d681SAndroid Build Coastguard Worker - { id: 10, class: sreg_128 } 100*9880d681SAndroid Build Coastguard Workerbody: | 101*9880d681SAndroid Build Coastguard Worker bb.0: 102*9880d681SAndroid Build Coastguard Worker %0 = REG_SEQUENCE %sgpr0, %subreg.sub0, %sgpr0, %subreg.sub2 103*9880d681SAndroid Build Coastguard Worker %1 = INSERT_SUBREG %0, %sgpr1, %subreg.sub3 104*9880d681SAndroid Build Coastguard Worker %2 = INSERT_SUBREG %0:sub2_sub3, %sgpr42, %subreg.sub0 105*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %1:sub0 106*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %1:sub1 107*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %1:sub2 108*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %1:sub3 109*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %2:sub0 110*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %2:sub1 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker %3 = IMPLICIT_DEF 113*9880d681SAndroid Build Coastguard Worker %4 = INSERT_SUBREG %0, %3, %subreg.sub0 114*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %4:sub0 115*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %4:sub1 116*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %4:sub2 117*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %4:sub3 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Worker %5 = EXTRACT_SUBREG %0, %subreg.sub0_sub1 120*9880d681SAndroid Build Coastguard Worker %6 = EXTRACT_SUBREG %5, %subreg.sub0 121*9880d681SAndroid Build Coastguard Worker %7 = EXTRACT_SUBREG %5, %subreg.sub1 122*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %5 123*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %6 124*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %7 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Worker %8 = IMPLICIT_DEF 127*9880d681SAndroid Build Coastguard Worker %9 = EXTRACT_SUBREG %8, %subreg.sub1 128*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %9 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Worker %10 = EXTRACT_SUBREG undef %0, %subreg.sub2_sub3 131*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %10 132*9880d681SAndroid Build Coastguard Worker... 133*9880d681SAndroid Build Coastguard Worker--- 134*9880d681SAndroid Build Coastguard Worker# Check used lanes transfer; Includes checking for some special cases like 135*9880d681SAndroid Build Coastguard Worker# undef operands. 136*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: test2 137*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def dead %0 138*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %1 139*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %2 140*9880d681SAndroid Build Coastguard Worker# CHECK: %3 = REG_SEQUENCE undef %0, {{[0-9]+}}, %1, {{[0-9]+}}, %2, {{[0-9]+}} 141*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %3:sub1 142*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %3:sub3 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %4 145*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def dead %5 146*9880d681SAndroid Build Coastguard Worker# CHECK: %6 = REG_SEQUENCE %4, {{[0-9]+}}, undef %5, {{[0-9]+}} 147*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %6 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def dead %7 150*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %8 151*9880d681SAndroid Build Coastguard Worker# CHECK: %9 = INSERT_SUBREG undef %7, %8, {{[0-9]+}} 152*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %9:sub2 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %10 155*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def dead %11 156*9880d681SAndroid Build Coastguard Worker# CHECK: %12 = INSERT_SUBREG %10, undef %11, {{[0-9]+}} 157*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %12:sub3 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %13 160*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def dead %14 161*9880d681SAndroid Build Coastguard Worker# CHECK: %15 = REG_SEQUENCE %13, {{[0-9]+}}, undef %14, {{[0-9]+}} 162*9880d681SAndroid Build Coastguard Worker# CHECK: %16 = EXTRACT_SUBREG %15, {{[0-9]+}} 163*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %16:sub1 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workername: test2 166*9880d681SAndroid Build Coastguard WorkerisSSA: true 167*9880d681SAndroid Build Coastguard Workerregisters: 168*9880d681SAndroid Build Coastguard Worker - { id: 0, class: sreg_32 } 169*9880d681SAndroid Build Coastguard Worker - { id: 1, class: sreg_32 } 170*9880d681SAndroid Build Coastguard Worker - { id: 2, class: sreg_64 } 171*9880d681SAndroid Build Coastguard Worker - { id: 3, class: sreg_128 } 172*9880d681SAndroid Build Coastguard Worker - { id: 4, class: sreg_32 } 173*9880d681SAndroid Build Coastguard Worker - { id: 5, class: sreg_32 } 174*9880d681SAndroid Build Coastguard Worker - { id: 6, class: sreg_64 } 175*9880d681SAndroid Build Coastguard Worker - { id: 7, class: sreg_128 } 176*9880d681SAndroid Build Coastguard Worker - { id: 8, class: sreg_64 } 177*9880d681SAndroid Build Coastguard Worker - { id: 9, class: sreg_128 } 178*9880d681SAndroid Build Coastguard Worker - { id: 10, class: sreg_128 } 179*9880d681SAndroid Build Coastguard Worker - { id: 11, class: sreg_64 } 180*9880d681SAndroid Build Coastguard Worker - { id: 12, class: sreg_128 } 181*9880d681SAndroid Build Coastguard Worker - { id: 13, class: sreg_64 } 182*9880d681SAndroid Build Coastguard Worker - { id: 14, class: sreg_64 } 183*9880d681SAndroid Build Coastguard Worker - { id: 15, class: sreg_128 } 184*9880d681SAndroid Build Coastguard Worker - { id: 16, class: sreg_64 } 185*9880d681SAndroid Build Coastguard Workerbody: | 186*9880d681SAndroid Build Coastguard Worker bb.0: 187*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %0 188*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %1 189*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %2 190*9880d681SAndroid Build Coastguard Worker %3 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1, %2, %subreg.sub2_sub3 191*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %3:sub1 192*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %3:sub3 193*9880d681SAndroid Build Coastguard Worker 194*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %4 195*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %5 196*9880d681SAndroid Build Coastguard Worker %6 = REG_SEQUENCE %4, %subreg.sub0, undef %5, %subreg.sub1 197*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %6 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %7 200*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %8 201*9880d681SAndroid Build Coastguard Worker %9 = INSERT_SUBREG %7, %8, %subreg.sub2_sub3 202*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %9:sub2 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %10 205*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %11 206*9880d681SAndroid Build Coastguard Worker %12 = INSERT_SUBREG %10, %11, %subreg.sub0_sub1 207*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %12:sub3 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %13 210*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %14 211*9880d681SAndroid Build Coastguard Worker %15 = REG_SEQUENCE %13, %subreg.sub0_sub1, %14, %subreg.sub2_sub3 212*9880d681SAndroid Build Coastguard Worker %16 = EXTRACT_SUBREG %15, %subreg.sub0_sub1 213*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %16:sub1 214*9880d681SAndroid Build Coastguard Worker... 215*9880d681SAndroid Build Coastguard Worker--- 216*9880d681SAndroid Build Coastguard Worker# Check that copies to physregs use all lanes, copies from physregs define all 217*9880d681SAndroid Build Coastguard Worker# lanes. So we should not get a dead/undef flag here. 218*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: test3 219*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %0 220*9880d681SAndroid Build Coastguard Worker# CHECK: %vcc = COPY %0 221*9880d681SAndroid Build Coastguard Worker# CHECK: %1 = COPY %vcc 222*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %1 223*9880d681SAndroid Build Coastguard Workername: test3 224*9880d681SAndroid Build Coastguard WorkerisSSA: true 225*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 226*9880d681SAndroid Build Coastguard Workerregisters: 227*9880d681SAndroid Build Coastguard Worker - { id: 0, class: sreg_64 } 228*9880d681SAndroid Build Coastguard Worker - { id: 1, class: sreg_64 } 229*9880d681SAndroid Build Coastguard Workerbody: | 230*9880d681SAndroid Build Coastguard Worker bb.0: 231*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %0 232*9880d681SAndroid Build Coastguard Worker %vcc = COPY %0 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Worker %1 = COPY %vcc 235*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %1 236*9880d681SAndroid Build Coastguard Worker... 237*9880d681SAndroid Build Coastguard Worker--- 238*9880d681SAndroid Build Coastguard Worker# Check that implicit-def/kill do not count as def/uses. 239*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: test4 240*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def dead %0 241*9880d681SAndroid Build Coastguard Worker# CHECK: KILL undef %0 242*9880d681SAndroid Build Coastguard Worker# CHECK: %1 = IMPLICIT_DEF 243*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %1 244*9880d681SAndroid Build Coastguard Workername: test4 245*9880d681SAndroid Build Coastguard WorkerisSSA: true 246*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 247*9880d681SAndroid Build Coastguard Workerregisters: 248*9880d681SAndroid Build Coastguard Worker - { id: 0, class: sreg_64 } 249*9880d681SAndroid Build Coastguard Worker - { id: 1, class: sreg_64 } 250*9880d681SAndroid Build Coastguard Workerbody: | 251*9880d681SAndroid Build Coastguard Worker bb.0: 252*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %0 253*9880d681SAndroid Build Coastguard Worker KILL %0 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard Worker %1 = IMPLICIT_DEF 256*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %1 257*9880d681SAndroid Build Coastguard Worker... 258*9880d681SAndroid Build Coastguard Worker--- 259*9880d681SAndroid Build Coastguard Worker# Check that unused inputs are marked as undef, even if the vreg itself is 260*9880d681SAndroid Build Coastguard Worker# used. 261*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: test5 262*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %0 263*9880d681SAndroid Build Coastguard Worker# CHECK: %1 = REG_SEQUENCE undef %0, {{[0-9]+}}, %0, {{[0-9]+}} 264*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %1:sub1 265*9880d681SAndroid Build Coastguard Workername: test5 266*9880d681SAndroid Build Coastguard WorkerisSSA: true 267*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 268*9880d681SAndroid Build Coastguard Workerregisters: 269*9880d681SAndroid Build Coastguard Worker - { id: 0, class: sreg_32 } 270*9880d681SAndroid Build Coastguard Worker - { id: 1, class: sreg_64 } 271*9880d681SAndroid Build Coastguard Workerbody: | 272*9880d681SAndroid Build Coastguard Worker bb.0: 273*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %0 274*9880d681SAndroid Build Coastguard Worker %1 = REG_SEQUENCE %0, %subreg.sub0, %0, %subreg.sub1 275*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %1:sub1 276*9880d681SAndroid Build Coastguard Worker... 277*9880d681SAndroid Build Coastguard Worker--- 278*9880d681SAndroid Build Coastguard Worker# Check "optimistic" dataflow fixpoint in phi-loops. 279*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: loop0 280*9880d681SAndroid Build Coastguard Worker# CHECK: bb.0: 281*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %0 282*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def dead %1 283*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def dead %2 284*9880d681SAndroid Build Coastguard Worker# CHECK: %3 = REG_SEQUENCE %0, {{[0-9]+}}, undef %1, {{[0-9]+}}, undef %2, {{[0-9]+}} 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Worker# CHECK: bb.1: 287*9880d681SAndroid Build Coastguard Worker# CHECK: %4 = PHI %3, %bb.0, %5, %bb.1 288*9880d681SAndroid Build Coastguard Worker 289*9880d681SAndroid Build Coastguard Worker# CHECK: bb.2: 290*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %4:sub0 291*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %4:sub3 292*9880d681SAndroid Build Coastguard Workername: loop0 293*9880d681SAndroid Build Coastguard WorkerisSSA: true 294*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 295*9880d681SAndroid Build Coastguard Workerregisters: 296*9880d681SAndroid Build Coastguard Worker - { id: 0, class: sreg_32 } 297*9880d681SAndroid Build Coastguard Worker - { id: 1, class: sreg_32 } 298*9880d681SAndroid Build Coastguard Worker - { id: 2, class: sreg_32 } 299*9880d681SAndroid Build Coastguard Worker - { id: 3, class: sreg_128 } 300*9880d681SAndroid Build Coastguard Worker - { id: 4, class: sreg_128 } 301*9880d681SAndroid Build Coastguard Worker - { id: 5, class: sreg_128 } 302*9880d681SAndroid Build Coastguard Workerbody: | 303*9880d681SAndroid Build Coastguard Worker bb.0: 304*9880d681SAndroid Build Coastguard Worker successors: %bb.1 305*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %0 306*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %1 307*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %2 308*9880d681SAndroid Build Coastguard Worker %3 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1, %2, %subreg.sub2 309*9880d681SAndroid Build Coastguard Worker S_BRANCH %bb.1 310*9880d681SAndroid Build Coastguard Worker 311*9880d681SAndroid Build Coastguard Worker bb.1: 312*9880d681SAndroid Build Coastguard Worker successors: %bb.1, %bb.2 313*9880d681SAndroid Build Coastguard Worker %4 = PHI %3, %bb.0, %5, %bb.1 314*9880d681SAndroid Build Coastguard Worker 315*9880d681SAndroid Build Coastguard Worker ; let's swiffle some lanes around for fun... 316*9880d681SAndroid Build Coastguard Worker %5 = REG_SEQUENCE %4:sub0, %subreg.sub0, %4:sub2, %subreg.sub1, %4:sub1, %subreg.sub2, %4:sub3, %subreg.sub3 317*9880d681SAndroid Build Coastguard Worker 318*9880d681SAndroid Build Coastguard Worker S_CBRANCH_VCCNZ %bb.1, implicit undef %vcc 319*9880d681SAndroid Build Coastguard Worker S_BRANCH %bb.2 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard Worker bb.2: 322*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %4:sub0 323*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %4:sub3 324*9880d681SAndroid Build Coastguard Worker... 325*9880d681SAndroid Build Coastguard Worker--- 326*9880d681SAndroid Build Coastguard Worker# Check a loop that needs to be traversed multiple times to reach the fixpoint 327*9880d681SAndroid Build Coastguard Worker# for the used lanes. The example reads sub3 lane at the end, however with each 328*9880d681SAndroid Build Coastguard Worker# loop iteration we should get 1 more lane marked as we cycles the sublanes 329*9880d681SAndroid Build Coastguard Worker# along. Sublanes sub0, sub1 and sub3 are rotate in the loop so only sub2 330*9880d681SAndroid Build Coastguard Worker# should be dead. 331*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: loop1 332*9880d681SAndroid Build Coastguard Worker# CHECK: bb.0: 333*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %0 334*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %1 335*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def dead %2 336*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %3 337*9880d681SAndroid Build Coastguard Worker# CHECK: %4 = REG_SEQUENCE %0, {{[0-9]+}}, %1, {{[0-9]+}}, undef %2, {{[0-9]+}}, %3, {{[0-9]+}} 338*9880d681SAndroid Build Coastguard Worker 339*9880d681SAndroid Build Coastguard Worker# CHECK: bb.1: 340*9880d681SAndroid Build Coastguard Worker# CHECK: %5 = PHI %4, %bb.0, %6, %bb.1 341*9880d681SAndroid Build Coastguard Worker 342*9880d681SAndroid Build Coastguard Worker# CHECK: %6 = REG_SEQUENCE %5:sub1, {{[0-9]+}}, %5:sub3, {{[0-9]+}}, undef %5:sub2, {{[0-9]+}}, %5:sub0, {{[0-9]+}} 343*9880d681SAndroid Build Coastguard Worker 344*9880d681SAndroid Build Coastguard Worker# CHECK: bb.2: 345*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %6:sub3 346*9880d681SAndroid Build Coastguard Workername: loop1 347*9880d681SAndroid Build Coastguard WorkerisSSA: true 348*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 349*9880d681SAndroid Build Coastguard Workerregisters: 350*9880d681SAndroid Build Coastguard Worker - { id: 0, class: sreg_32 } 351*9880d681SAndroid Build Coastguard Worker - { id: 1, class: sreg_32 } 352*9880d681SAndroid Build Coastguard Worker - { id: 2, class: sreg_32 } 353*9880d681SAndroid Build Coastguard Worker - { id: 3, class: sreg_32 } 354*9880d681SAndroid Build Coastguard Worker - { id: 4, class: sreg_128 } 355*9880d681SAndroid Build Coastguard Worker - { id: 5, class: sreg_128 } 356*9880d681SAndroid Build Coastguard Worker - { id: 6, class: sreg_128 } 357*9880d681SAndroid Build Coastguard Workerbody: | 358*9880d681SAndroid Build Coastguard Worker bb.0: 359*9880d681SAndroid Build Coastguard Worker successors: %bb.1 360*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %0 361*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %1 362*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def dead %2 363*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %3 364*9880d681SAndroid Build Coastguard Worker %4 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1, %2, %subreg.sub2, %3, %subreg.sub3 365*9880d681SAndroid Build Coastguard Worker S_BRANCH %bb.1 366*9880d681SAndroid Build Coastguard Worker 367*9880d681SAndroid Build Coastguard Worker bb.1: 368*9880d681SAndroid Build Coastguard Worker successors: %bb.1, %bb.2 369*9880d681SAndroid Build Coastguard Worker %5 = PHI %4, %bb.0, %6, %bb.1 370*9880d681SAndroid Build Coastguard Worker 371*9880d681SAndroid Build Coastguard Worker ; rotate lanes, but skip sub2 lane... 372*9880d681SAndroid Build Coastguard Worker %6 = REG_SEQUENCE %5:sub1, %subreg.sub0, %5:sub3, %subreg.sub1, %5:sub2, %subreg.sub2, %5:sub0, %subreg.sub3 373*9880d681SAndroid Build Coastguard Worker 374*9880d681SAndroid Build Coastguard Worker S_CBRANCH_VCCNZ %bb.1, implicit undef %vcc 375*9880d681SAndroid Build Coastguard Worker S_BRANCH %bb.2 376*9880d681SAndroid Build Coastguard Worker 377*9880d681SAndroid Build Coastguard Worker bb.2: 378*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %6:sub3 379*9880d681SAndroid Build Coastguard Worker... 380*9880d681SAndroid Build Coastguard Worker--- 381*9880d681SAndroid Build Coastguard Worker# Similar to loop1 test, but check for fixpoint of defined lanes. 382*9880d681SAndroid Build Coastguard Worker# Lanes are rotate between sub0, sub2, sub3 so only sub1 should be dead/undef. 383*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: loop2 384*9880d681SAndroid Build Coastguard Worker# CHECK: bb.0: 385*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit-def %0 386*9880d681SAndroid Build Coastguard Worker# CHECK: %1 = REG_SEQUENCE %0, {{[0-9]+}} 387*9880d681SAndroid Build Coastguard Worker 388*9880d681SAndroid Build Coastguard Worker# CHECK: bb.1: 389*9880d681SAndroid Build Coastguard Worker# CHECK: %2 = PHI %1, %bb.0, %3, %bb.1 390*9880d681SAndroid Build Coastguard Worker 391*9880d681SAndroid Build Coastguard Worker# CHECK: %3 = REG_SEQUENCE %2:sub3, {{[0-9]+}}, undef %2:sub1, {{[0-9]+}}, %2:sub0, {{[0-9]+}}, %2:sub2, {{[0-9]+}} 392*9880d681SAndroid Build Coastguard Worker 393*9880d681SAndroid Build Coastguard Worker# CHECK: bb.2: 394*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %2:sub0 395*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit undef %2:sub1 396*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %2:sub2 397*9880d681SAndroid Build Coastguard Worker# CHECK: S_NOP 0, implicit %2:sub3 398*9880d681SAndroid Build Coastguard Workername: loop2 399*9880d681SAndroid Build Coastguard WorkerisSSA: true 400*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 401*9880d681SAndroid Build Coastguard Workerregisters: 402*9880d681SAndroid Build Coastguard Worker - { id: 0, class: sreg_32 } 403*9880d681SAndroid Build Coastguard Worker - { id: 1, class: sreg_128 } 404*9880d681SAndroid Build Coastguard Worker - { id: 2, class: sreg_128 } 405*9880d681SAndroid Build Coastguard Worker - { id: 3, class: sreg_128 } 406*9880d681SAndroid Build Coastguard Workerbody: | 407*9880d681SAndroid Build Coastguard Worker bb.0: 408*9880d681SAndroid Build Coastguard Worker successors: %bb.1 409*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit-def %0 410*9880d681SAndroid Build Coastguard Worker %1 = REG_SEQUENCE %0, %subreg.sub0 411*9880d681SAndroid Build Coastguard Worker S_BRANCH %bb.1 412*9880d681SAndroid Build Coastguard Worker 413*9880d681SAndroid Build Coastguard Worker bb.1: 414*9880d681SAndroid Build Coastguard Worker successors: %bb.1, %bb.2 415*9880d681SAndroid Build Coastguard Worker %2 = PHI %1, %bb.0, %3, %bb.1 416*9880d681SAndroid Build Coastguard Worker 417*9880d681SAndroid Build Coastguard Worker ; rotate subreg lanes, skipping sub1 418*9880d681SAndroid Build Coastguard Worker %3 = REG_SEQUENCE %2:sub3, %subreg.sub0, %2:sub1, %subreg.sub1, %2:sub0, %subreg.sub2, %2:sub2, %subreg.sub3 419*9880d681SAndroid Build Coastguard Worker 420*9880d681SAndroid Build Coastguard Worker S_CBRANCH_VCCNZ %bb.1, implicit undef %vcc 421*9880d681SAndroid Build Coastguard Worker S_BRANCH %bb.2 422*9880d681SAndroid Build Coastguard Worker 423*9880d681SAndroid Build Coastguard Worker bb.2: 424*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %2:sub0 425*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit undef %2:sub1 426*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %2:sub2 427*9880d681SAndroid Build Coastguard Worker S_NOP 0, implicit %2:sub3 428*9880d681SAndroid Build Coastguard Worker... 429