1# RUN: llc -mtriple=powerpc64le--linux-gnu -stop-after ppc-pre-emit-peephole %s -o - -verify-machineinstrs | FileCheck %s 2 3# ADDI instr: ToBeChangedReg = ADDI FrameBaseReg, OffsetAddi 4# ADD instr: ToBeDeletedReg = ADD ToBeChangedReg(killed), ScaleReg 5# Imm instr: Reg = op OffsetImm, ToBeDeletedReg(killed) 6# 7# can be folded to: 8# 9# new ADDI instr: ToBeChangedReg = ADDI FrameBaseReg, (OffsetAddi + OffsetImm) 10# Index instr: Reg = opx ScaleReg, ToBeChangedReg(killed) 11 12--- 13name: testIndexForm1 14#CHECK : name : testIndexForm1 15# ToBeDeletedReg equals to ScaleReg 16tracksRegLiveness: true 17body: | 18 bb.0.entry: 19 liveins: $x3, $x1, $x4, $x6 20 $x3 = ADDI8 $x1, -80 21 ; CHECK: $x3 = ADDI8 $x1, -76 22 $x4 = ADD8 killed $x3, killed $x4 23 ; CHECK-NOT: ADD8 24 $x6 = LD 4, killed $x4 25 ; CHECK: $x6 = LDX killed $x4, killed $x3 26 BLR8 implicit $lr8, implicit $rm 27... 28--- 29name: testIndexForm2 30#CHECK : name : testIndexForm2 31# ToBeDeletedReg equals to ToBeChangedReg 32tracksRegLiveness: true 33body: | 34 bb.0.entry: 35 liveins: $x3, $x1, $x4, $x6 36 $x3 = ADDI8 $x1, -80 37 ; CHECK: $x3 = ADDI8 $x1, -76 38 $x3 = ADD8 killed $x3, killed $x4 39 ; CHECK-NOT: ADD8 40 $x6 = LD 4, killed $x3 41 ; CHECK: $x6 = LDX killed $x4, killed $x3 42 BLR8 implicit $lr8, implicit $rm 43... 44--- 45name: testIndexForm3 46#CHECK : name : testIndexForm3 47# There is other use for ToBeDeletedReg between ADD instr and Imm instr 48tracksRegLiveness: true 49body: | 50 bb.0.entry: 51 liveins: $x3, $x1, $x4, $x6 52 $x3 = ADDI8 $x1, -80 53 ; CHECK: $x3 = ADDI8 $x1, -80 54 $x3 = ADD8 killed $x3, killed $x4 55 ; CHECK: $x3 = ADD8 killed $x3, killed $x4 56 STD $x3, killed $x6, 100 57 ; CHECK: STD $x3, killed $x6, 100 58 $x6 = LD 4, killed $x3 59 ; CHECK: $x6 = LD 4, killed $x3 60 BLR8 implicit $lr8, implicit $rm 61... 62--- 63name: testIndexForm4 64#CHECK : name : testIndexForm3 65# There is other use for ToBeChangedReg between ADDI instr and ADD instr 66tracksRegLiveness: true 67body: | 68 bb.0.entry: 69 liveins: $x3, $x1, $x4, $x6 70 $x3 = ADDI8 $x1, -80 71 ; CHECK: $x3 = ADDI8 $x1, -80 72 STD $x3, killed $x6, 100 73 ; CHECK: STD $x3, killed $x6, 100 74 $x3 = ADD8 killed $x3, killed $x4 75 ; CHECK: $x3 = ADD8 killed $x3, killed $x4 76 $x6 = LD 4, killed $x3 77 ; CHECK: $x6 = LD 4, killed $x3 78 BLR8 implicit $lr8, implicit $rm 79... 80--- 81name: testIndexForm5 82#CHECK : name : testIndexForm5 83# ToBeChangedReg has no killed flag 84tracksRegLiveness: true 85body: | 86 bb.0.entry: 87 liveins: $x3, $x1, $x4, $x6 88 $x3 = ADDI8 $x1, -80 89 ; CHECK: $x3 = ADDI8 $x1, -80 90 $x4 = ADD8 $x3, killed $x4 91 ; CHECK: $x4 = ADD8 $x3, killed $x4 92 STD killed $x3, killed $x6, 100 93 ; CHECK: STD killed $x3, killed $x6, 100 94 $x6 = LD 4, killed $x4 95 ; CHECK: $x6 = LD 4, killed $x4 96 BLR8 implicit $lr8, implicit $rm 97... 98--- 99name: testIndexForm6 100#CHECK : name : testIndexForm6 101# ToBeDeletedReg has no killed flag 102tracksRegLiveness: true 103body: | 104 bb.0.entry: 105 liveins: $x3, $x1, $x4, $x6 106 $x3 = ADDI8 $x1, -80 107 ; CHECK: $x3 = ADDI8 $x1, -80 108 $x4 = ADD8 killed $x3, killed $x4 109 ; CHECK: $x4 = ADD8 killed $x3, killed $x4 110 $x6 = LD 4, $x4 111 ; CHECK: $x6 = LD 4, $x4 112 STD killed $x4, killed $x6, 100 113 BLR8 implicit $lr8, implicit $rm 114... 115--- 116name: testIndexForm7 117#CHECK : name : testIndexForm7 118# There is other def for ToBeChangedReg between ADD instr and Imm instr 119tracksRegLiveness: true 120body: | 121 bb.0.entry: 122 liveins: $x3, $x1, $x4, $x5, $x6 123 $x3 = ADDI8 $x1, -80 124 ; CHECK: $x3 = ADDI8 $x1, -80 125 $x4 = ADD8 killed $x3, killed $x5 126 ; CHECK: $x4 = ADD8 killed $x3, killed $x5 127 $x3 = LD 100, $x6 128 ; CHECK: $x3 = LD 100, $x6 129 STD killed $x3, killed $x6, 200 130 ; CHECK: STD killed $x3, killed $x6, 200 131 $x6 = LD 4, killed $x4 132 ; CHECK: $x6 = LD 4, killed $x4 133 BLR8 implicit $lr8, implicit $rm 134... 135--- 136name: testIndexForm8 137#CHECK : name : testIndexForm8 138# There is other def for ScaleReg between ADD instr and Imm instr 139tracksRegLiveness: true 140body: | 141 bb.0.entry: 142 liveins: $x3, $x1, $x4, $x5, $x6 143 $x3 = ADDI8 $x1, -80 144 ; CHECK: $x3 = ADDI8 $x1, -80 145 $x4 = ADD8 killed $x3, killed $x5 146 ; CHECK: $x4 = ADD8 killed $x3, killed $x5 147 $x5 = LD 100, $x6 148 ; CHECK: $x5 = LD 100, $x6 149 STD killed $x5, killed $x6, 200 150 ; CHECK: STD killed $x5, killed $x6, 200 151 $x6 = LD 4, killed $x4 152 ; CHECK: $x6 = LD 4, killed $x4 153 BLR8 implicit $lr8, implicit $rm 154... 155