blob: 3c5c2be935e27a7ec9dbd142931528961e120162 [file] [log] [blame]
Chen Zheng02cbdbd2019-08-16 01:52:50 +00001# 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, -80
22 $x4 = ADD8 killed $x3, killed $x4
23 ; CHECK: $x4 = ADD8 killed $x3, killed $x4
24 $x6 = LD 4, killed $x4
25 ; CHECK: $x6 = LD 4, killed $x4
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, -80
38 $x3 = ADD8 killed $x3, killed $x4
39 ; CHECK: $x3 = ADD8 killed $x3, killed $x4
40 $x6 = LD 4, killed $x3
41 ; CHECK: $x6 = LD 4, 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...