[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / Mips / longbranch / branch-limits-fp-mipsr6.mir
blob5356ea43485e9fd7ac15cfc0d4e1bff456c4c0ae
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=mips-img-linux-gnu -mcpu=mips32r6 %s -o - -start-before mips-delay-slot-filler -stop-after mips-branch-expansion | FileCheck %s --check-prefix=R6
3 # RUN: llc -mtriple=mips-img-linux-gnu -mcpu=mips32r6 %s -o - -start-before mips-delay-slot-filler -stop-after mips-branch-expansion -relocation-model=pic | FileCheck %s --check-prefix=PIC
5 # Test the long branch expansion of various branches
7 --- |
9   define i32 @a(double %a, double %b) {
10   entry:
11     %cmp = fcmp une double %a, %b
12     br i1 %cmp, label %if.then, label %return
14   if.then:                                          ; preds = %entry
15     call void asm sideeffect ".space 310680", "~{$1}"()
16     ret i32 0
18   return:                                           ; preds = %entry
19     ret i32 1
20   }
22   define i32 @b(double %a, double %b) {
23   entry:
24     %cmp = fcmp ueq double %a, %b
25     br i1 %cmp, label %if.then, label %return
27   if.then:                                          ; preds = %entry
28     call void asm sideeffect ".space 310680", "~{$1}"()
29     ret i32 0
31   return:                                           ; preds = %entry
32     ret i32 1
33   }
36 ...
37 ---
38 name:            a
39 alignment:       4
40 exposesReturnsTwice: false
41 legalized:       false
42 regBankSelected: false
43 selected:        false
44 failedISel:      false
45 tracksRegLiveness: true
46 registers:
47 liveins:
48   - { reg: '$d12_64', virtual-reg: '' }
49   - { reg: '$d14_64', virtual-reg: '' }
50 frameInfo:
51   isFrameAddressTaken: false
52   isReturnAddressTaken: false
53   hasStackMap:     false
54   hasPatchPoint:   false
55   stackSize:       0
56   offsetAdjustment: 0
57   maxAlignment:    1
58   adjustsStack:    false
59   hasCalls:        false
60   stackProtector:  ''
61   maxCallFrameSize: 0
62   hasOpaqueSPAdjustment: false
63   hasVAStart:      false
64   hasMustTailInVarArgFunc: false
65   localFrameSize:  0
66   savePoint:       ''
67   restorePoint:    ''
68 fixedStack:
69 stack:
70 constants:
71 body:             |
72   ; R6-LABEL: name: a
73   ; R6: bb.0.entry:
74   ; R6:   successors: %bb.2(0x50000000), %bb.1(0x30000000)
75   ; R6:   $f0 = CMP_EQ_D killed $d12_64, killed $d14_64
76   ; R6:   BC1NEZ $d0_64, %bb.2 {
77   ; R6:     NOP
78   ; R6:   }
79   ; R6: bb.1.entry:
80   ; R6:   successors: %bb.3(0x80000000)
81   ; R6:   BC %bb.3
82   ; R6: bb.2.if.then:
83   ; R6:   INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
84   ; R6:   PseudoReturn undef $ra, implicit killed $v0 {
85   ; R6:     $v0 = ADDiu $zero, 0
86   ; R6:   }
87   ; R6: bb.3.return:
88   ; R6:   PseudoReturn undef $ra, implicit killed $v0 {
89   ; R6:     $v0 = ADDiu $zero, 1
90   ; R6:   }
91   ; PIC-LABEL: name: a
92   ; PIC: bb.0.entry:
93   ; PIC:   successors: %bb.3(0x50000000), %bb.1(0x30000000)
94   ; PIC:   $f0 = CMP_EQ_D killed $d12_64, killed $d14_64
95   ; PIC:   BC1NEZ $d0_64, %bb.3 {
96   ; PIC:     NOP
97   ; PIC:   }
98   ; PIC: bb.1.entry:
99   ; PIC:   successors: %bb.2(0x80000000)
100   ; PIC:   $sp = ADDiu $sp, -8
101   ; PIC:   SW $ra, $sp, 0
102   ; PIC:   $at = LONG_BRANCH_LUi target-flags(mips-abs-hi) %bb.4, %bb.2
103   ; PIC:   $at = LONG_BRANCH_ADDiu $at, target-flags(mips-abs-lo) %bb.4, %bb.2
104   ; PIC:   BALC %bb.2, implicit-def $ra
105   ; PIC: bb.2.entry:
106   ; PIC:   successors: %bb.4(0x80000000)
107   ; PIC:   $at = ADDu $ra, $at
108   ; PIC:   $ra = LW $sp, 0
109   ; PIC:   $sp = ADDiu $sp, 8
110   ; PIC:   JIC $at, 0, implicit-def $at
111   ; PIC: bb.3.if.then:
112   ; PIC:   INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
113   ; PIC:   PseudoReturn undef $ra, implicit killed $v0 {
114   ; PIC:     $v0 = ADDiu $zero, 0
115   ; PIC:   }
116   ; PIC: bb.4.return:
117   ; PIC:   PseudoReturn undef $ra, implicit killed $v0 {
118   ; PIC:     $v0 = ADDiu $zero, 1
119   ; PIC:   }
120   bb.0.entry:
121     successors: %bb.1(0x50000000), %bb.2(0x30000000)
122     liveins: $d12_64, $d14_64
124     $f0 = CMP_EQ_D killed $d12_64, killed $d14_64
125     BC1EQZ killed $d0_64, %bb.2, implicit-def $at
127   bb.1.if.then:
128     INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
129     $v0 = ADDiu $zero, 0
130     PseudoReturn undef $ra, implicit killed $v0
132   bb.2.return:
133     $v0 = ADDiu $zero, 1
134     PseudoReturn undef $ra, implicit killed $v0
138 name:            b
139 alignment:       4
140 exposesReturnsTwice: false
141 legalized:       false
142 regBankSelected: false
143 selected:        false
144 failedISel:      false
145 tracksRegLiveness: true
146 registers:
147 liveins:
148   - { reg: '$d12_64', virtual-reg: '' }
149   - { reg: '$d14_64', virtual-reg: '' }
150 frameInfo:
151   isFrameAddressTaken: false
152   isReturnAddressTaken: false
153   hasStackMap:     false
154   hasPatchPoint:   false
155   stackSize:       0
156   offsetAdjustment: 0
157   maxAlignment:    1
158   adjustsStack:    false
159   hasCalls:        false
160   stackProtector:  ''
161   maxCallFrameSize: 0
162   hasOpaqueSPAdjustment: false
163   hasVAStart:      false
164   hasMustTailInVarArgFunc: false
165   localFrameSize:  0
166   savePoint:       ''
167   restorePoint:    ''
168 fixedStack:
169 stack:
170 constants:
171 body:             |
172   ; R6-LABEL: name: b
173   ; R6: bb.0.entry:
174   ; R6:   successors: %bb.2(0x50000000), %bb.1(0x30000000)
175   ; R6:   $f0 = CMP_EQ_D killed $d12_64, killed $d14_64
176   ; R6:   BC1EQZ $d0_64, %bb.2 {
177   ; R6:     NOP
178   ; R6:   }
179   ; R6: bb.1.entry:
180   ; R6:   successors: %bb.3(0x80000000)
181   ; R6:   BC %bb.3
182   ; R6: bb.2.if.then:
183   ; R6:   INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
184   ; R6:   PseudoReturn undef $ra, implicit killed $v0 {
185   ; R6:     $v0 = ADDiu $zero, 0
186   ; R6:   }
187   ; R6: bb.3.return:
188   ; R6:   PseudoReturn undef $ra, implicit killed $v0 {
189   ; R6:     $v0 = ADDiu $zero, 1
190   ; R6:   }
191   ; PIC-LABEL: name: b
192   ; PIC: bb.0.entry:
193   ; PIC:   successors: %bb.3(0x50000000), %bb.1(0x30000000)
194   ; PIC:   $f0 = CMP_EQ_D killed $d12_64, killed $d14_64
195   ; PIC:   BC1EQZ $d0_64, %bb.3 {
196   ; PIC:     NOP
197   ; PIC:   }
198   ; PIC: bb.1.entry:
199   ; PIC:   successors: %bb.2(0x80000000)
200   ; PIC:   $sp = ADDiu $sp, -8
201   ; PIC:   SW $ra, $sp, 0
202   ; PIC:   $at = LONG_BRANCH_LUi target-flags(mips-abs-hi) %bb.4, %bb.2
203   ; PIC:   $at = LONG_BRANCH_ADDiu $at, target-flags(mips-abs-lo) %bb.4, %bb.2
204   ; PIC:   BALC %bb.2, implicit-def $ra
205   ; PIC: bb.2.entry:
206   ; PIC:   successors: %bb.4(0x80000000)
207   ; PIC:   $at = ADDu $ra, $at
208   ; PIC:   $ra = LW $sp, 0
209   ; PIC:   $sp = ADDiu $sp, 8
210   ; PIC:   JIC $at, 0, implicit-def $at
211   ; PIC: bb.3.if.then:
212   ; PIC:   INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
213   ; PIC:   PseudoReturn undef $ra, implicit killed $v0 {
214   ; PIC:     $v0 = ADDiu $zero, 0
215   ; PIC:   }
216   ; PIC: bb.4.return:
217   ; PIC:   PseudoReturn undef $ra, implicit killed $v0 {
218   ; PIC:     $v0 = ADDiu $zero, 1
219   ; PIC:   }
220   bb.0.entry:
221     successors: %bb.1(0x50000000), %bb.2(0x30000000)
222     liveins: $d12_64, $d14_64
224     $f0 = CMP_EQ_D killed $d12_64, killed $d14_64
225     BC1NEZ killed $d0_64, %bb.2, implicit-def $at
227   bb.1.if.then:
228     INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
229     $v0 = ADDiu $zero, 0
230     PseudoReturn undef $ra, implicit killed $v0
232   bb.2.return:
233     $v0 = ADDiu $zero, 1
234     PseudoReturn undef $ra, implicit killed $v0