169 lines · plain
1# RUN: llc -mtriple=powerpc64le--linux-gnu -stop-after ppc-pre-emit-peephole %s -o - -verify-machineinstrs | FileCheck %s2 3# ADDI instr: ToBeChangedReg = ADDI FrameBaseReg, OffsetAddi4# ADD instr: ToBeDeletedReg = ADD ToBeChangedReg(killed), ScaleReg5# 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: testIndexForm114#CHECK: name: testIndexForm115# ToBeDeletedReg equals to ScaleReg16tracksRegLiveness: true17body: |18 bb.0.entry:19 liveins: $x3, $x1, $x4, $x620 $x3 = ADDI8 $x1, -8021 ; CHECK: $x3 = ADDI8 $x1, -7622 $x4 = ADD8 killed $x3, killed $x423 ; CHECK-NOT: ADD824 $x6 = LD 4, killed $x425 ; CHECK: $x6 = LDX killed $x4, killed $x326 BLR8 implicit $lr8, implicit $rm27...28---29name: testIndexForm230#CHECK: name: testIndexForm231# ToBeDeletedReg equals to ToBeChangedReg32tracksRegLiveness: true33body: |34 bb.0.entry:35 liveins: $x3, $x1, $x4, $x636 $x3 = ADDI8 $x1, -8037 ; CHECK: $x3 = ADDI8 $x1, -7638 $x3 = ADD8 killed $x3, killed $x439 ; CHECK-NOT: ADD840 $x6 = LD 4, killed $x341 ; CHECK: $x6 = LDX killed $x4, killed $x342 BLR8 implicit $lr8, implicit $rm43...44---45name: testIndexForm346#CHECK: name: testIndexForm347# There is other use for ToBeDeletedReg between ADD instr and Imm instr48tracksRegLiveness: true49body: |50 bb.0.entry:51 liveins: $x3, $x1, $x4, $x652 $x3 = ADDI8 $x1, -8053 ; CHECK: $x3 = ADDI8 $x1, -8054 $x3 = ADD8 killed $x3, killed $x455 ; CHECK: $x3 = ADD8 killed $x3, killed $x456 STD $x3, killed $x6, 10057 ; CHECK: STD $x3, killed $x6, 10058 $x6 = LD 4, killed $x359 ; CHECK: $x6 = LD 4, killed $x360 BLR8 implicit $lr8, implicit $rm61...62---63name: testIndexForm464#CHECK: name: testIndexForm465# There is other use for ToBeChangedReg between ADDI instr and ADD instr66tracksRegLiveness: true67body: |68 bb.0.entry:69 liveins: $x3, $x1, $x4, $x670 $x3 = ADDI8 $x1, -8071 ; CHECK: $x3 = ADDI8 $x1, -8072 STD $x3, killed $x6, 10073 ; CHECK: STD $x3, killed $x6, 10074 $x3 = ADD8 killed $x3, killed $x475 ; CHECK: $x3 = ADD8 killed $x3, killed $x476 $x6 = LD 4, killed $x377 ; CHECK: $x6 = LD 4, killed $x378 BLR8 implicit $lr8, implicit $rm79...80---81name: testIndexForm582#CHECK: name: testIndexForm583# ToBeChangedReg has no killed flag84tracksRegLiveness: true85body: |86 bb.0.entry:87 liveins: $x3, $x1, $x4, $x688 $x3 = ADDI8 $x1, -8089 ; CHECK: $x3 = ADDI8 $x1, -8090 $x4 = ADD8 $x3, killed $x491 ; CHECK: $x4 = ADD8 $x3, killed $x492 STD killed $x3, killed $x6, 10093 ; CHECK: STD killed $x3, killed $x6, 10094 $x6 = LD 4, killed $x495 ; CHECK: $x6 = LD 4, killed $x496 BLR8 implicit $lr8, implicit $rm97...98---99name: testIndexForm6100#CHECK: name: testIndexForm6101# ToBeDeletedReg has no killed flag102tracksRegLiveness: true103body: |104 bb.0.entry:105 liveins: $x3, $x1, $x4, $x6106 $x3 = ADDI8 $x1, -80107 ; CHECK: $x3 = ADDI8 $x1, -80108 $x4 = ADD8 killed $x3, killed $x4109 ; CHECK: $x4 = ADD8 killed $x3, killed $x4110 $x6 = LD 4, $x4111 ; CHECK: $x6 = LD 4, $x4112 STD killed $x4, killed $x6, 100113 BLR8 implicit $lr8, implicit $rm114...115---116name: testIndexForm7117#CHECK: name: testIndexForm7118# There is other def for ToBeChangedReg between ADD instr and Imm instr119tracksRegLiveness: true120body: |121 bb.0.entry:122 liveins: $x3, $x1, $x4, $x5, $x6123 $x3 = ADDI8 $x1, -80124 ; CHECK: $x3 = ADDI8 $x1, -80125 $x4 = ADD8 killed $x3, killed $x5126 ; CHECK: $x4 = ADD8 killed $x3, killed $x5127 $x3 = LD 100, $x6128 ; CHECK: $x3 = LD 100, $x6129 STD killed $x3, killed $x6, 200130 ; CHECK: STD killed $x3, killed $x6, 200131 $x6 = LD 4, killed $x4132 ; CHECK: $x6 = LD 4, killed $x4133 BLR8 implicit $lr8, implicit $rm134...135---136name: testIndexForm8137#CHECK: name: testIndexForm8138# There is other def for ScaleReg between ADD instr and Imm instr139tracksRegLiveness: true140body: |141 bb.0.entry:142 liveins: $x3, $x1, $x4, $x5, $x6143 $x3 = ADDI8 $x1, -80144 ; CHECK: $x3 = ADDI8 $x1, -80145 $x4 = ADD8 killed $x3, killed $x5146 ; CHECK: $x4 = ADD8 killed $x3, killed $x5147 $x5 = LD 100, $x6148 ; CHECK: $x5 = LD 100, $x6149 STD killed $x5, killed $x6, 200150 ; CHECK: STD killed $x5, killed $x6, 200151 $x6 = LD 4, killed $x4152 ; CHECK: $x6 = LD 4, killed $x4153 BLR8 implicit $lr8, implicit $rm154...155---156name: testR0157#CHECK: name: testR0158# Give up the folding if the register is R0/X0159tracksRegLiveness: true160body: |161 bb.0.entry:162 liveins: $f1, $x0, $x3163 $x4 = ADDI8 killed $x3, -8164 $x4 = ADD8 killed $x4, $x0165 STFD killed $f1, -8, killed $x4166 ; CHECK-NOT: STFDX167 BLR8 implicit $lr8, implicit $rm168...169