184 lines · plain
1# RUN: llc -mtriple=powerpc64le--linux-gnu -stop-after ppc-pre-emit-peephole %s -o - -verify-machineinstrs | FileCheck %s2 3---4# LI + XFORM -> DFORM, no killed/dead flag fixup.5name: testKillPassUpLI16#CHECK: name: testKillPassUpLI17tracksRegLiveness: true8body: |9 bb.0.entry:10 liveins: $x3, $f1, $x511 $x3 = LI8 10012 STFSX killed $f1, $x3, $x513 ; CHECK: STFS killed $f1, 100, $x514 STD killed $x3, killed $x5, 10015 ; CHECK: STD killed $x3, killed $x5, 10016 BLR8 implicit $lr8, implicit $rm17 18...19---20# LI + XFORM -> DFORM, fixup killed/dead flag for $x3, find no use, set def as21# dead(LI8 is deleted).22name: testKillPassUpLI223# CHECK: name: testKillPassUpLI224tracksRegLiveness: true25body: |26 bb.0.entry:27 liveins: $x3, $f1, $x528 $x3 = LI8 10029 ; CHECK-NOT: LI830 STFSX killed $f1, killed $x3, killed $x531 ; CHECK: STFS killed $f1, 100, killed $x532 BLR8 implicit $lr8, implicit $rm33 34...35---36# LI + XFORM -> DFORM, fixup killed/dead flag for $x3, find last use, set last37# use as killed.38name: testKillPassUpLI339# CHECK: name: testKillPassUpLI340tracksRegLiveness: true41body: |42 bb.0.entry:43 liveins: $x3, $f1, $x544 $x3 = LI8 10045 STD $x3, $x5, 10046 ; CHECK: STD killed $x3, $x5, 10047 STFSX killed $f1, killed $x3, $x548 ; CHECK: STFS killed $f1, 100, $x549 STD killed $x5, $x5, 10050 ; CHECK: STD killed $x5, killed $x5, 10051 BLR8 implicit $lr8, implicit $rm52 53...54---55# LI + OP -> LI, fixup killed/dead flag for $x3, find last use, set last use as56# killed.57name: testKillPassUpLI458# CHECK: name: testKillPassUpLI459tracksRegLiveness: true60body: |61 bb.0.entry:62 liveins: $x3, $x563 $x3 = LI8 10064 STD $x3, $x5, 10065 ; CHECK: STD killed $x3, killed $x5, 10066 $x5 = ADDI8 killed $x3, 20067 ; CHECK: $x5 = LI8 30068 STD $x5, $x5, 10069 BLR8 implicit $lr8, implicit $rm70 71...72---73# ADD + XFORM -> DFORM, fixup killed/dead flag for $x3, find no use, set def as dead74# (ADDI8 is deleted).75name: testKillPassUpADD176# CHECK: name: testKillPassUpADD177tracksRegLiveness: true78body: |79 bb.0.entry:80 liveins: $x3, $f1, $x581 $x3 = ADDI8 killed $x5, 10082 ; CHECK-NOT: ADDI883 STFSX killed $f1, $zero8, killed $x384 ; CHECK: STFS killed $f1, 100, killed $x585 BLR8 implicit $lr8, implicit $rm86 87...88---89# ADD + XFORM -> DFORM, fixup killed/dead flag for $x3, find last use, set last90# use as killed.91name: testKillPassUpADD292# CHECK: name: testKillPassUpADD293tracksRegLiveness: true94body: |95 bb.0.entry:96 liveins: $x3, $f1, $x597 $x3 = ADDI8 $x5, 10098 STD $x3, $x5, 10099 ; CHECK: STD killed $x3, $x5, 100100 STFSX killed $f1, $zero8, killed $x3101 ; CHECK: STFS killed $f1, 100, $x5102 STD killed $x5, $x5, 100103 ; CHECK: STD killed $x5, killed $x5, 100104 BLR8 implicit $lr8, implicit $rm105 106...107---108# ADD + XFORM -> DFORM, fixup killed/dead flag for register $x5, DFORM109# instruction uses $x5 and no other kill uses, set it as killed in110# DFORM instruction.111name: testKillPassDownADD1112# CHECK: name: testKillPassDownADD1113tracksRegLiveness: true114body: |115 bb.0.entry:116 liveins: $x3, $f1, $x5117 $x3 = ADDI8 killed $x5, 100118 ; CHECK: $x3 = ADDI8 $x5, 100119 STFSX killed $f1, $zero8, $x3120 ; CHECK: STFS killed $f1, 100, killed $x5121 STD killed $x3, $x3, 100122 ; CHECK: STD killed $x3, killed $x3, 100123 BLR8 implicit $lr8, implicit $rm124 125...126---127# ADD + XFORM -> DFORM, fixup killed/dead flag for register $x5, DFORM128# instruction uses $x5 and there is one kill use, set $x5 as killed in129# DFORM instruction and clear the other kill use killed flag.130name: testKillPassDownADD2131# CHECK: name: testKillPassDownADD2132tracksRegLiveness: true133body: |134 bb.0.entry:135 liveins: $x3, $f1, $x5136 $x3 = ADDI8 $x5, 100137 STD killed $x5, $x5, 100138 ; CHECK: STD $x5, $x5, 100139 STFSX killed $f1, $zero8, killed $x3140 ; CHECK: STFS killed $f1, 100, killed $x5141 BLR8 implicit $lr8, implicit $rm142 143...144---145# ADD + XFORM -> DFORM, fixup killed/dead flag for register $x3, DFORM146# instruction defines $x3, do nothing for killed/dead flag.147name: testKillPassDownADD3148# CHECK: name: testKillPassDownADD3149tracksRegLiveness: true150body: |151 bb.0.entry:152 liveins: $x3, $x5153 $x3 = ADDI8 $x5, 100154 $x3 = LDX $zero8, killed $x3155 ; CHECK: $x3 = LD 100, $x5156 STD killed $x5, $x5, 100157 ; CHECK: STD killed $x5, killed $x5, 100158 STD killed $x3, $x3, 200159 ; CHECK: STD killed $x3, killed $x3, 200160 BLR8 implicit $lr8, implicit $rm161 162...163---164# ADD + XFORM -> DFORM, fixup killed/dead flag for both register $x5 and $x3,165# DFORM instruction uses $x5 and there is one kill use, set $x5 as killed in166# DFORM instruction and clear the other kill use killed flag. Find last use for167# $x3, set last use as killed.168name: testKillPassDownADD4169# CHECK: name: testKillPassDownADD4170tracksRegLiveness: true171body: |172 bb.0.entry:173 liveins: $x3, $f1, $x5174 $x3 = ADDI8 $x5, 100175 STD killed $x5, $x5, 100176 ; CHECK: STD $x5, $x5, 100177 STD $x3, $x3, 200178 ; CHECK: STD killed $x3, killed $x3, 200179 STFSX killed $f1, $zero8, killed $x3180 ; CHECK: STFS killed $f1, 100, killed $x5181 BLR8 implicit $lr8, implicit $rm182 183...184