298 lines · plain
1# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 %s -o - \2# RUN: -run-pass=livevars,phi-node-elimination | FileCheck %s3# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 %s -o - \4# RUN: --passes='require<live-vars>,phi-node-elimination' | FileCheck %s5 6--- |7 define void @phi_eliminate(i32 %0, i32 %1, ptr %2) {8 %scevgep3 = getelementptr i8, ptr %2, i64 undef9 call void @llvm.set.loop.iterations.i64(i64 undef)10 br label %411 12 4: ; preds = %4, %313 %5 = phi i32 [ %8, %4 ], [ %0, %3 ]14 %6 = phi ptr [ %scevgep3, %3 ], [ %7, %4 ]15 %7 = getelementptr i8, ptr %6, i64 -116 %8 = sdiv i32 %5, %117 %9 = mul nsw i32 %8, %118 %10 = sub nsw i32 %5, %919 %11 = icmp ult i32 %10, 1020 %12 = trunc i32 %10 to i821 %13 = select i1 %11, i8 48, i8 5522 %14 = add i8 %13, %1223 store i8 %14, ptr %7, align 124 %15 = call i1 @llvm.loop.decrement.i64(i64 1)25 br i1 %15, label %4, label %1626 27 16: ; preds = %428 ret void29 }30 31 declare void @llvm.set.loop.iterations.i64(i64)32 33 declare i1 @llvm.loop.decrement.i64(i64)34 35 declare void @llvm.stackprotector(ptr, ptr)36...37---38name: phi_eliminate39alignment: 1640exposesReturnsTwice: false41legalized: false42regBankSelected: false43selected: false44failedISel: false45tracksRegLiveness: true46hasWinCFI: false47registers:48 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }49 - { id: 1, class: gprc, preferred-register: '' }50 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }51 - { id: 3, class: g8rc, preferred-register: '' }52 - { id: 4, class: gprc, preferred-register: '' }53 - { id: 5, class: g8rc, preferred-register: '' }54 - { id: 6, class: g8rc, preferred-register: '' }55 - { id: 7, class: g8rc, preferred-register: '' }56 - { id: 8, class: gprc, preferred-register: '' }57 - { id: 9, class: gprc, preferred-register: '' }58 - { id: 10, class: g8rc, preferred-register: '' }59 - { id: 11, class: gprc, preferred-register: '' }60 - { id: 12, class: gprc, preferred-register: '' }61 - { id: 13, class: crrc, preferred-register: '' }62 - { id: 14, class: gprc_and_gprc_nor0, preferred-register: '' }63 - { id: 15, class: gprc_and_gprc_nor0, preferred-register: '' }64 - { id: 16, class: gprc, preferred-register: '' }65 - { id: 17, class: gprc, preferred-register: '' }66 - { id: 18, class: g8rc_and_g8rc_nox0, preferred-register: '' }67 - { id: 19, class: gprc, preferred-register: '' }68 - { id: 20, class: gprc, preferred-register: '' }69 - { id: 21, class: gprc, preferred-register: '' }70 - { id: 22, class: crrc, preferred-register: '' }71 - { id: 23, class: gprc, preferred-register: '' }72 - { id: 24, class: gprc, preferred-register: '' }73 - { id: 25, class: g8rc_and_g8rc_nox0, preferred-register: '' }74 - { id: 26, class: gprc, preferred-register: '' }75 - { id: 27, class: g8rc_and_g8rc_nox0, preferred-register: '' }76 - { id: 28, class: gprc, preferred-register: '' }77 - { id: 29, class: gprc, preferred-register: '' }78 - { id: 30, class: gprc, preferred-register: '' }79 - { id: 31, class: crrc, preferred-register: '' }80 - { id: 32, class: gprc, preferred-register: '' }81 - { id: 33, class: gprc, preferred-register: '' }82 - { id: 34, class: g8rc_and_g8rc_nox0, preferred-register: '' }83 - { id: 35, class: gprc, preferred-register: '' }84 - { id: 36, class: gprc, preferred-register: '' }85 - { id: 37, class: gprc, preferred-register: '' }86 - { id: 38, class: g8rc_and_g8rc_nox0, preferred-register: '' }87 - { id: 39, class: g8rc, preferred-register: '' }88 - { id: 40, class: gprc, preferred-register: '' }89 - { id: 41, class: gprc, preferred-register: '' }90 - { id: 42, class: g8rc_and_g8rc_nox0, preferred-register: '' }91 - { id: 43, class: gprc, preferred-register: '' }92 - { id: 44, class: g8rc_and_g8rc_nox0, preferred-register: '' }93 - { id: 45, class: gprc, preferred-register: '' }94 - { id: 46, class: gprc, preferred-register: '' }95 - { id: 47, class: crrc, preferred-register: '' }96 - { id: 48, class: gprc, preferred-register: '' }97 - { id: 49, class: gprc, preferred-register: '' }98 - { id: 50, class: g8rc_and_g8rc_nox0, preferred-register: '' }99 - { id: 51, class: g8rc, preferred-register: '' }100 - { id: 52, class: gprc, preferred-register: '' }101 - { id: 53, class: gprc, preferred-register: '' }102 - { id: 54, class: g8rc_and_g8rc_nox0, preferred-register: '' }103 - { id: 55, class: gprc, preferred-register: '' }104 - { id: 56, class: gprc, preferred-register: '' }105liveins:106 - { reg: '$x3', virtual-reg: '%5' }107 - { reg: '$x4', virtual-reg: '%6' }108frameInfo:109 isFrameAddressTaken: false110 isReturnAddressTaken: false111 hasStackMap: false112 hasPatchPoint: false113 stackSize: 0114 offsetAdjustment: 0115 maxAlignment: 1116 adjustsStack: false117 hasCalls: false118 stackProtector: ''119 maxCallFrameSize: 4294967295120 cvBytesOfCalleeSavedRegisters: 0121 hasOpaqueSPAdjustment: false122 hasVAStart: false123 hasMustTailInVarArgFunc: false124 localFrameSize: 0125 savePoint: []126 restorePoint: []127fixedStack: []128stack: []129callSites: []130constants: []131machineFunctionInfo: {}132body: |133 ; CHECK-LABEL: name: phi_eliminate134 ; CHECK: bb.0 (%ir-block.3):135 ; CHECK: successors: %bb.1(0x80000000)136 ; CHECK: liveins: $x3, $x4137 ; CHECK: %6:g8rc = COPY killed $x4138 ; CHECK: %5:g8rc = COPY killed $x3139 ; CHECK: %9:gprc = COPY killed %6.sub_32140 ; CHECK: %8:gprc = COPY killed %5.sub_32141 ; CHECK: MTCTR8loop undef %10:g8rc, implicit-def dead $ctr8142 ; CHECK: %14:gprc_and_gprc_nor0 = LI 55143 ; CHECK: %15:gprc_and_gprc_nor0 = LI 48144 145 ; CHECK: bb.1 (%ir-block.4):146 ; CHECK: successors: %bb.2(0x40000000), %bb.7(0x40000000)147 ; CHECK: %19:gprc = DIVW %8, %9148 ; CHECK: BDNZ8 %bb.2, implicit-def $ctr8, implicit $ctr8149 150 ; CHECK: bb.7:151 ; CHECK: successors: %bb.5(0x80000000)152 ; CHECK: %61:gprc = COPY killed %8153 ; CHECK: %62:g8rc_and_g8rc_nox0 = IMPLICIT_DEF154 ; CHECK: %63:gprc = COPY killed %19155 ; CHECK: B %bb.5156 157 ; CHECK: bb.2 (%ir-block.4):158 ; CHECK: successors: %bb.3(0x40000000), %bb.4(0x40000000)159 ; CHECK: %20:gprc = nsw MULLW %19, %9160 ; CHECK: %21:gprc = SUBF killed %20, killed %8161 ; CHECK: %22:crrc = CMPLWI %21, 10162 ; CHECK: %23:gprc = ISEL %15, %14, killed %22.sub_lt163 ; CHECK: %24:gprc = ADD4 killed %23, killed %21164 ; CHECK: %25:g8rc_and_g8rc_nox0 = STBU killed %24, -1, undef %0:g8rc_and_g8rc_nox0 :: (store (s8) into %ir.7)165 ; CHECK: %26:gprc = DIVW %19, %9166 ; CHECK: %57:gprc = COPY killed %26167 ; CHECK: %58:gprc = COPY %19168 ; CHECK: %59:g8rc_and_g8rc_nox0 = COPY killed %25169 ; CHECK: %60:gprc = COPY killed %19170 ; CHECK: BDZ8 %bb.4, implicit-def $ctr8, implicit $ctr8171 ; CHECK: B %bb.3172 173 ; CHECK: bb.3 (%ir-block.4):174 ; CHECK: successors: %bb.3(0x7c000000), %bb.4(0x04000000)175 ; CHECK: %38:g8rc_and_g8rc_nox0 = COPY killed %59176 ; CHECK: %37:gprc = COPY %57177 ; CHECK: %36:gprc = COPY killed %58178 ; CHECK: %35:gprc = COPY killed %57179 ; CHECK: %27:g8rc_and_g8rc_nox0 = COPY killed %38180 ; CHECK: %56:gprc = COPY %35181 ; CHECK: %28:gprc = DIVW %56, %9182 ; CHECK: %29:gprc = nsw MULLW killed %37, %9183 ; CHECK: %30:gprc = SUBF killed %29, killed %36184 ; CHECK: %31:crrc = CMPLWI %30, 10185 ; CHECK: %32:gprc = ISEL %15, %14, killed %31.sub_lt186 ; CHECK: %33:gprc = ADD4 killed %32, killed %30187 ; CHECK: %34:g8rc_and_g8rc_nox0 = STBU killed %33, -1, killed %27 :: (store unknown-size into %ir.7, align 1)188 ; CHECK: %57:gprc = COPY killed %28189 ; CHECK: %58:gprc = COPY killed %35190 ; CHECK: %59:g8rc_and_g8rc_nox0 = COPY killed %34191 ; CHECK: %60:gprc = COPY killed %56192 ; CHECK: BDNZ8 %bb.3, implicit-def $ctr8, implicit $ctr8193 ; CHECK: B %bb.4194 195 ; CHECK: bb.4:196 ; CHECK: successors: %bb.5(0x80000000)197 ; CHECK: %44:g8rc_and_g8rc_nox0 = COPY killed %59198 ; CHECK: %43:gprc = COPY killed %57199 ; CHECK: %41:gprc = COPY killed %60200 ; CHECK: %39:g8rc = COPY killed %44201 ; CHECK: %61:gprc = COPY killed %41202 ; CHECK: %62:g8rc_and_g8rc_nox0 = COPY killed %39203 ; CHECK: %63:gprc = COPY killed %43204 205 ; CHECK: bb.5:206 ; CHECK: successors: %bb.6(0x80000000)207 ; CHECK: %55:gprc = COPY killed %63208 ; CHECK: %54:g8rc_and_g8rc_nox0 = COPY killed %62209 ; CHECK: %53:gprc = COPY killed %61210 ; CHECK: %45:gprc = nsw MULLW killed %55, killed %9211 ; CHECK: %46:gprc = SUBF killed %45, killed %53212 ; CHECK: %47:crrc = CMPLWI %46, 10213 ; CHECK: %48:gprc = ISEL killed %15, killed %14, killed %47.sub_lt214 ; CHECK: %49:gprc = ADD4 killed %48, killed %46215 ; CHECK: dead %50:g8rc_and_g8rc_nox0 = STBU killed %49, -1, killed %54 :: (store unknown-size into %ir.7, align 1)216 ; CHECK: B %bb.6217 218 ; CHECK: bb.6 (%ir-block.16):219 ; CHECK: BLR8 implicit $lr8, implicit $rm220 221 bb.0 (%ir-block.3):222 successors: %bb.1(0x80000000)223 liveins: $x3, $x4224 225 %6:g8rc = COPY killed $x4226 %5:g8rc = COPY killed $x3227 %9:gprc = COPY killed %6.sub_32228 %8:gprc = COPY killed %5.sub_32229 MTCTR8loop undef %10:g8rc, implicit-def dead $ctr8230 %14:gprc_and_gprc_nor0 = LI 55231 %15:gprc_and_gprc_nor0 = LI 48232 233 bb.1 (%ir-block.4):234 successors: %bb.2(0x40000000), %bb.5(0x40000000)235 236 %19:gprc = DIVW %8, %9237 BDZ8 %bb.5, implicit-def $ctr8, implicit $ctr8238 B %bb.2239 240 bb.2 (%ir-block.4):241 successors: %bb.3(0x40000000), %bb.4(0x40000000)242 243 %20:gprc = nsw MULLW %19, %9244 %21:gprc = SUBF killed %20, killed %8245 %22:crrc = CMPLWI %21, 10246 %23:gprc = ISEL %15, %14, killed %22.sub_lt247 %24:gprc = ADD4 killed %23, killed %21248 %25:g8rc_and_g8rc_nox0 = STBU killed %24, -1, undef %0:g8rc_and_g8rc_nox0 :: (store (s8) into %ir.7)249 %26:gprc = DIVW %19, %9250 BDZ8 %bb.4, implicit-def $ctr8, implicit $ctr8251 B %bb.3252 253 bb.3 (%ir-block.4):254 successors: %bb.3(0x7c000000), %bb.4(0x04000000)255 256 %35:gprc = PHI %26, %bb.2, %28, %bb.3257 %36:gprc = PHI %19, %bb.2, %35, %bb.3258 %37:gprc = PHI %26, %bb.2, %28, %bb.3259 %38:g8rc_and_g8rc_nox0 = PHI %25, %bb.2, %34, %bb.3260 %27:g8rc_and_g8rc_nox0 = COPY killed %38261 %56:gprc = COPY %35262 %28:gprc = DIVW %56, %9263 %29:gprc = nsw MULLW killed %37, %9264 %30:gprc = SUBF killed %29, killed %36265 %31:crrc = CMPLWI %30, 10266 %32:gprc = ISEL %15, %14, killed %31.sub_lt267 %33:gprc = ADD4 killed %32, killed %30268 %34:g8rc_and_g8rc_nox0 = STBU killed %33, -1, killed %27 :: (store unknown-size into %ir.7, align 1)269 BDNZ8 %bb.3, implicit-def $ctr8, implicit $ctr8270 B %bb.4271 272 bb.4:273 successors: %bb.5(0x80000000)274 275 %41:gprc = PHI %19, %bb.2, %56, %bb.3276 %43:gprc = PHI %26, %bb.2, %28, %bb.3277 %44:g8rc_and_g8rc_nox0 = PHI %25, %bb.2, %34, %bb.3278 %39:g8rc = COPY killed %44279 280 bb.5:281 successors: %bb.6(0x80000000)282 283 %53:gprc = PHI %8, %bb.1, %41, %bb.4284 %54:g8rc_and_g8rc_nox0 = PHI undef %0:g8rc_and_g8rc_nox0, %bb.1, %39, %bb.4285 %55:gprc = PHI %19, %bb.1, %43, %bb.4286 %45:gprc = nsw MULLW killed %55, killed %9287 %46:gprc = SUBF killed %45, killed %53288 %47:crrc = CMPLWI %46, 10289 %48:gprc = ISEL killed %15, killed %14, killed %47.sub_lt290 %49:gprc = ADD4 killed %48, killed %46291 dead %50:g8rc_and_g8rc_nox0 = STBU killed %49, -1, killed %54 :: (store unknown-size into %ir.7, align 1)292 B %bb.6293 294 bb.6 (%ir-block.16):295 BLR8 implicit $lr8, implicit $rm296 297...298