[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / PowerPC / fold-frame-offset-using-rr.mir
blob3c5c2be935e27a7ec9dbd142931528961e120162
1 # RUN: llc -mtriple=powerpc64le--linux-gnu -stop-after ppc-pre-emit-peephole %s -o - -verify-machineinstrs | FileCheck %s
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:
9 # new ADDI instr: ToBeChangedReg = ADDI FrameBaseReg, (OffsetAddi + OffsetImm)
10 # Index instr:    Reg            = opx ScaleReg, ToBeChangedReg(killed)
12 ---
13 name: testIndexForm1
14 #CHECK : name : testIndexForm1
15 # ToBeDeletedReg equals to ScaleReg
16 tracksRegLiveness: true
17 body: |
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 ---
29 name: testIndexForm2
30 #CHECK : name : testIndexForm2
31 # ToBeDeletedReg equals to ToBeChangedReg
32 tracksRegLiveness: true
33 body: |
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 ---
45 name: testIndexForm3
46 #CHECK : name : testIndexForm3
47 # There is other use for ToBeDeletedReg between ADD instr and Imm instr
48 tracksRegLiveness: true
49 body: |
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 ---
63 name: testIndexForm4
64 #CHECK : name : testIndexForm3
65 # There is other use for ToBeChangedReg between ADDI instr and ADD instr
66 tracksRegLiveness: true
67 body: |
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 ---
81 name: testIndexForm5
82 #CHECK : name : testIndexForm5
83 # ToBeChangedReg has no killed flag
84 tracksRegLiveness: true
85 body: |
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 ---
99 name: testIndexForm6
100 #CHECK : name : testIndexForm6
101 # ToBeDeletedReg has no killed flag
102 tracksRegLiveness: true
103 body: |
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