brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.9 KiB · 3ac463b Raw
390 lines · plain
1# RUN: llc -mtriple=amdgcn -run-pass si-fold-operands -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s2 3# GCN-LABEL: name: fold-imm-readfirstlane{{$}}4# GCN: %1:sreg_32_xm0 = S_MOV_B32 1235---6name: fold-imm-readfirstlane7tracksRegLiveness: true8body:             |9  bb.0:10    %0:vgpr_32 = V_MOV_B32_e32 123, implicit $exec11    %1:sreg_32_xm0 = V_READFIRSTLANE_B32 %0, implicit $exec12    S_NOP 0, implicit %113...14 15# GCN-LABEL: name: fold-imm-readfirstlane-dbgvalue{{$}}16# GCN: %1:sreg_32_xm0 = S_MOV_B32 12317# GCN: DBG_VALUE %0:vgpr_32, 0, 018---19name: fold-imm-readfirstlane-dbgvalue20tracksRegLiveness: true21body:             |22  bb.0:23    %0:vgpr_32 = V_MOV_B32_e32 123, implicit $exec24    %1:sreg_32_xm0 = V_READFIRSTLANE_B32 %0, implicit $exec25    DBG_VALUE %0, 0, 026    S_NOP 0, implicit %127...28 29# GCN-LABEL: name: fold-imm-readfirstlane-readfirstlane{{$}}30# GCN: %3:sreg_32_xm0 = S_MOV_B32 12331 32---33name: fold-imm-readfirstlane-readfirstlane34tracksRegLiveness: true35body:             |36  bb.0:37    %0:vgpr_32 = V_MOV_B32_e32 123, implicit $exec38    %1:sreg_32_xm0 = V_READFIRSTLANE_B32 %0, implicit $exec39    %2:vgpr_32 = COPY %140    %3:sreg_32_xm0 = V_READFIRSTLANE_B32 %2, implicit $exec41    S_NOP 0, implicit %342...43 44 45# GCN-LABEL: name: fold-copy-readfirstlane{{$}}46# GCN: %0:sreg_32_xm0 = COPY $sgpr1047# GCN: %2:sreg_32_xm0 = COPY %048---49name: fold-copy-readfirstlane50tracksRegLiveness: true51body:             |52  bb.0:53    liveins: $sgpr1054    %0:sreg_32_xm0 = COPY $sgpr1055    %1:vgpr_32 = COPY %056    %2:sreg_32_xm0 = V_READFIRSTLANE_B32 %1, implicit $exec57    S_NOP 0, implicit %258...59 60# GCN-LABEL: name: no-fold-copy-readfirstlane-physreg0{{$}}61# GCN: %0:vgpr_32 = COPY $sgpr1062# GCN-NEXT: %1:sreg_32_xm0 = V_READFIRSTLANE_B32 %0, implicit $exec63---64name: no-fold-copy-readfirstlane-physreg065tracksRegLiveness: true66body:             |67  bb.0:68    liveins: $sgpr1069    %0:vgpr_32 = COPY $sgpr1070    %1:sreg_32_xm0 = V_READFIRSTLANE_B32 %0, implicit $exec71 72...73 74# GCN-LABEL: name: no-fold-copy-readfirstlane-physreg1{{$}}75# GCN: $vgpr0 = COPY $sgpr1076# GCN-NEXT: %0:sreg_32_xm0 = V_READFIRSTLANE_B32 $vgpr0, implicit $exec77---78name: no-fold-copy-readfirstlane-physreg179tracksRegLiveness: true80body:             |81  bb.0:82    liveins: $sgpr1083    $vgpr0 = COPY $sgpr1084    %0:sreg_32_xm0 = V_READFIRSTLANE_B32 $vgpr0, implicit $exec85 86...87 88# GCN-LABEL: name: no-fold-imm-readfirstlane-physreg{{$}}89# GCN: $vgpr0 = V_MOV_B32_e32 123, implicit $exec90# GCN-NEXT: V_READFIRSTLANE_B32 $vgpr0, implicit $exec91 92---93name: no-fold-imm-readfirstlane-physreg94tracksRegLiveness: true95body:             |96  bb.0:97    $vgpr0 = V_MOV_B32_e32 123, implicit $exec98    %0:sreg_32_xm0 = V_READFIRSTLANE_B32 $vgpr0, implicit $exec99...100 101# TODO: This could be folded, if the search for exec modifications was102# smarter.103 104# GCN-LABEL: name: fold-imm-readfirstlane-cross-block{{$}}105# GCN: V_MOV_B32106# GCN: V_READFIRSTLANE_B32107---108name: fold-imm-readfirstlane-cross-block109tracksRegLiveness: true110body:             |111  bb.0:112    %0:vgpr_32 = V_MOV_B32_e32 123, implicit $exec113 114  bb.1:115    %1:sreg_32_xm0 = V_READFIRSTLANE_B32 %0, implicit $exec116...117 118# TODO: This could be folded, if the search for exec modifications was119# smarter.120 121# GCN-LABEL: name: fold-copy-readfirstlane-cross-block{{$}}122# GCN: V_MOV_B32123# GCN: V_READFIRSTLANE_B32124---125name: fold-copy-readfirstlane-cross-block126tracksRegLiveness: true127body:             |128  bb.0:129    liveins: $sgpr12130    %0:sreg_32_xm0 = COPY $sgpr12131    %1:vgpr_32 = V_MOV_B32_e32 %0, implicit $exec132 133  bb.1:134    %2:sreg_32_xm0 = V_READFIRSTLANE_B32 %1, implicit $exec135...136 137# GCN-LABEL: name: fold-copy-readfirstlane-cross-block-exec-def{{$}}138# GCN: V_MOV_B32139# GCN: $exec = S_MOV_B64_term140# GCN: V_READFIRSTLANE_B32141---142name: fold-copy-readfirstlane-cross-block-exec-def143tracksRegLiveness: true144body:             |145  bb.0:146    liveins: $sgpr10_sgpr11, $sgpr12147    %0:sreg_32_xm0 = COPY $sgpr12148    %1:vgpr_32 = V_MOV_B32_e32 %0, implicit $exec149    $exec = S_MOV_B64_term $sgpr10_sgpr11150 151  bb.1:152    %2:sreg_32_xm0 = V_READFIRSTLANE_B32 %1, implicit $exec153...154 155# GCN-LABEL: name: fold-copy-readfirstlane-same-block-exec-def{{$}}156# GCN: COPY157# GCN-NEXT: %1:vgpr_32 = COPY %0158# GCN-NEXT: $exec = S_MOV_B64159# GCN-NEXT: V_READFIRSTLANE_B32160---161name: fold-copy-readfirstlane-same-block-exec-def162tracksRegLiveness: true163body:             |164  bb.0:165    liveins: $sgpr10_sgpr11, $sgpr12166    %0:sreg_32_xm0 = COPY $sgpr12167    %1:vgpr_32 = COPY %0, implicit $exec168    $exec = S_MOV_B64 $sgpr10_sgpr11169    %2:sreg_32_xm0 = V_READFIRSTLANE_B32 %1, implicit $exec170 171...172 173# GCN-LABEL: name: fold-imm-readfirstlane-cross-block-exec-def{{$}}174# GCN: V_MOV_B32175# GCN: $exec = S_MOV_B64176# GCN: V_READFIRSTLANE_B32177 178---179name: fold-imm-readfirstlane-cross-block-exec-def180tracksRegLiveness: true181body:             |182  bb.0:183    liveins: $sgpr10_sgpr11, $sgpr12_sgpr13184    %0:vgpr_32 = V_MOV_B32_e32 123, implicit $exec185    $exec = S_MOV_B64_term $sgpr10_sgpr11186 187  bb.1:188    %1:sreg_32_xm0 = V_READFIRSTLANE_B32 %0, implicit $exec189...190 191# GCN-LABEL: name: fold-imm-readfirstlane-same-block-exec-def{{$}}192# GCN: V_MOV_B32193# GCN-NEXT: $exec = S_MOV_B64194# GCN-NEXT: V_READFIRSTLANE_B32195---196name: fold-imm-readfirstlane-same-block-exec-def197tracksRegLiveness: true198body:             |199  bb.0:200    liveins: $sgpr10_sgpr11201    %0:vgpr_32 = V_MOV_B32_e32 123, implicit $exec202    $exec = S_MOV_B64 $sgpr10_sgpr11203    %1:sreg_32_xm0 = V_READFIRSTLANE_B32 %0, implicit $exec204 205...206 207# GCN-LABEL: name: fold-sgpr-copy-readfirstlane-same-block-exec-def{{$}}208# GCN: COPY209# GCN-NEXT: $exec = S_MOV_B64210# GCN-NEXT: V_READFIRSTLANE_B32211---212name: fold-sgpr-copy-readfirstlane-same-block-exec-def213tracksRegLiveness: true214body:             |215  bb.0:216    liveins: $sgpr10_sgpr11, $sgpr12217    %0:vgpr_32 = COPY $sgpr12218    $exec = S_MOV_B64 $sgpr10_sgpr11219    %1:sreg_32_xm0 = V_READFIRSTLANE_B32 %0, implicit $exec220...221 222# GCN-LABEL: name: fold-imm-readfirstlane-user{{$}}223# GCN: %3:sreg_32_xm0 = S_MOV_B32 123224---225name: fold-imm-readfirstlane-user226tracksRegLiveness: true227body:             |228  bb.0:229    liveins: $vgpr0, $sgpr0_sgpr1230    %0:vgpr_32 = V_MOV_B32_e32 123, implicit $exec231    %1:sreg_32_xm0 = V_READFIRSTLANE_B32 %0, implicit $exec232    %2:sreg_32_xm0 = COPY %1233    %3:sreg_32_xm0 = COPY %2234    S_ENDPGM 0, implicit %3235...236 237# GCN-LABEL: name: fold-imm-readlane{{$}}238# GCN: %1:sreg_32_xm0 = S_MOV_B32 123239---240name: fold-imm-readlane241tracksRegLiveness: true242body:             |243  bb.0:244    liveins: $vgpr0, $sgpr0_sgpr1245    %0:vgpr_32 = V_MOV_B32_e32 123, implicit $exec246    %1:sreg_32_xm0 = V_READLANE_B32 %0, 0, implicit $exec247    S_NOP 0, implicit %1248...249 250# GCN-LABEL: name: fold-imm-readlane-src1{{$}}251# GCN: %0:vgpr_32 = COPY $vgpr0252# GCN: V_READLANE_B32 %0, 12, implicit $exec253---254name: fold-imm-readlane-src1255tracksRegLiveness: true256body:             |257  bb.0:258    liveins: $vgpr0259    %0:vgpr_32 = COPY $vgpr0260    %1:sreg_32_xm0 = S_MOV_B32 12261    %2:sreg_32_xm0 = V_READLANE_B32 %0, %1, implicit $exec262...263 264# Constant for subreg0265# GCN-LABEL: name: fold-imm-readfirstlane-regsequence0{{$}}266 267# GCN: %0:vgpr_32 = COPY $vgpr0268# GCN-NEXT: %1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec269# GCN-NEXT: %2:vreg_64 = REG_SEQUENCE %0, %subreg.sub0, killed %1, %subreg.sub1270# GCN-NEXT: %3:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub0, implicit $exec271# GCN-NEXT: %4:sreg_32_xm0 = S_MOV_B32 0272---273name: fold-imm-readfirstlane-regsequence0274tracksRegLiveness: true275body:             |276  bb.0:277    liveins: $vgpr0278    %0:vgpr_32 = COPY $vgpr0279    %1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec280    %2:vreg_64 = REG_SEQUENCE %0:vgpr_32, %subreg.sub0, killed %1:vgpr_32, %subreg.sub1281    %3:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub0:vreg_64, implicit $exec282    %4:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub1:vreg_64, implicit $exec283    S_NOP 0, implicit %3, implicit %4284...285 286# Constant for subreg1287# GCN-LABEL: name: fold-imm-readfirstlane-regsequence1{{$}}288# GCN: %0:vgpr_32 = COPY $vgpr0289# GCN-NEXT: %1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec290# GCN-NEXT: %2:vreg_64 = REG_SEQUENCE %1, %subreg.sub0, killed %0, %subreg.sub1291# GCN-NEXT: %3:sreg_32_xm0 = S_MOV_B32 0292# GCN-NEXT: %4:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub1, implicit $exec293 294---295name: fold-imm-readfirstlane-regsequence1296tracksRegLiveness: true297body:             |298  bb.0:299    liveins: $vgpr0300    %0:vgpr_32 = COPY $vgpr0301    %1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec302    %2:vreg_64 = REG_SEQUENCE %1:vgpr_32, %subreg.sub0, killed %0:vgpr_32, %subreg.sub1303    %3:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub0:vreg_64, implicit $exec304    %4:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub1:vreg_64, implicit $exec305    S_NOP 0, implicit %3, implicit %4306...307 308# Different constant regs for each subreg309# GCN-LABEL: name: fold-imm-readfirstlane-regsequence2{{$}}310# GCN: %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec311# GCN-NEXT: %1:vgpr_32 = V_MOV_B32_e32 1, implicit $exec312# GCN-NEXT: %2:vreg_64 = REG_SEQUENCE %0, %subreg.sub0, killed %1, %subreg.sub1313# GCN-NEXT: %3:sreg_32_xm0 = S_MOV_B32 0314# GCN-NEXT: %4:sreg_32_xm0 = S_MOV_B32 1315---316name: fold-imm-readfirstlane-regsequence2317tracksRegLiveness: true318body:             |319  bb.0:320    %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec321    %1:vgpr_32 = V_MOV_B32_e32 1, implicit $exec322    %2:vreg_64 = REG_SEQUENCE %0:vgpr_32, %subreg.sub0, killed %1:vgpr_32, %subreg.sub1323    %3:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub0:vreg_64, implicit $exec324    %4:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub1:vreg_64, implicit $exec325    S_NOP 0, implicit %3, implicit %4326...327 328# Same constant reg for each subreg, so there are multiple constant uses329# GCN-LABEL: name: fold-imm-readfirstlane-regsequence3{{$}}330# GCN: %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec331# GCN-NEXT: %1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec332# GCN-NEXT: %2:vreg_64 = REG_SEQUENCE %0, %subreg.sub0, killed %1, %subreg.sub1333# GCN-NEXT: %3:sreg_32_xm0 = S_MOV_B32 0334# GCN-NEXT: %4:sreg_32_xm0 = S_MOV_B32 0335---336name: fold-imm-readfirstlane-regsequence3337tracksRegLiveness: true338body:             |339  bb.0:340    %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec341    %1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec342    %2:vreg_64 = REG_SEQUENCE %0:vgpr_32, %subreg.sub0, killed %1:vgpr_32, %subreg.sub1343    %3:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub0:vreg_64, implicit $exec344    %4:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub1:vreg_64, implicit $exec345    S_NOP 0, implicit %3, implicit %4346...347 348# FIXME: This should fold349# GCN-LABEL: name: fold-copy-readfirstlane-regsequence0{{$}}350# GCN: %0:vgpr_32 = COPY $sgpr10351# GCN-NEXT: %1:vgpr_32 = COPY $sgpr11352# GCN-NEXT: %2:vreg_64 = REG_SEQUENCE %0, %subreg.sub0, killed %1, %subreg.sub1353# GCN-NEXT: %3:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub0, implicit $exec354# GCN-NEXT: %4:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub1, implicit $exec355---356name: fold-copy-readfirstlane-regsequence0357tracksRegLiveness: true358body:             |359  bb.0:360    liveins: $sgpr10, $sgpr11361    %0:vgpr_32 = COPY $sgpr10362    %1:vgpr_32 = COPY $sgpr11363    %2:vreg_64 = REG_SEQUENCE %0:vgpr_32, %subreg.sub0, killed %1:vgpr_32, %subreg.sub1364    %3:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub0:vreg_64, implicit $exec365    %4:sreg_32_xm0 = V_READFIRSTLANE_B32 %2.sub1:vreg_64, implicit $exec366...367 368# GCN-LABEL: name: fold-copy-readfirstlane-regsequence1{{$}}369# GCN: %0:sreg_32_xm0 = COPY $sgpr10370# GCN-NEXT: %1:sreg_32_xm0 = COPY $sgpr11371# GCN-NEXT: %2:vgpr_32 = COPY %0372# GCN-NEXT: %3:vgpr_32 = COPY %1373# GCN-NEXT: %4:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, killed %3, %subreg.sub1374# GCN-NEXT: %5:sreg_32_xm0 = V_READFIRSTLANE_B32 %4.sub0, implicit $exec375# GCN-NEXT: %6:sreg_32_xm0 = V_READFIRSTLANE_B32 %4.sub1, implicit $exec376---377name: fold-copy-readfirstlane-regsequence1378tracksRegLiveness: true379body:             |380  bb.0:381    liveins: $sgpr10, $sgpr11382    %0:sreg_32_xm0 = COPY $sgpr10383    %1:sreg_32_xm0 = COPY $sgpr11384    %2:vgpr_32 = COPY %0385    %3:vgpr_32 = COPY %1386    %4:vreg_64 = REG_SEQUENCE %2:vgpr_32, %subreg.sub0, killed %3:vgpr_32, %subreg.sub1387    %5:sreg_32_xm0 = V_READFIRSTLANE_B32 %4.sub0:vreg_64, implicit $exec388    %6:sreg_32_xm0 = V_READFIRSTLANE_B32 %4.sub1:vreg_64, implicit $exec389...390