• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=mips-mti-linux-gnu %s -o - -start-before mips-delay-slot-filler -stop-after mips-branch-expansion | FileCheck %s --check-prefix=MIPS
3# RUN: llc -mtriple=mips-mti-linux-gnu %s -o - -start-before mips-delay-slot-filler -stop-after mips-branch-expansion -relocation-model=pic | FileCheck %s --check-prefix=PIC
4# Test the long branch expansion of various branches
5
6--- |
7
8  define i32 @a(double %a, double %b) {
9  entry:
10    %cmp = fcmp une double %a, %b
11    br i1 %cmp, label %if.then, label %return
12
13  if.then:
14    call void asm sideeffect ".space 310680", "~{$1}"()
15    ret i32 0
16
17  return:
18    ret i32 1
19  }
20
21  define i32 @b(double %a, double %b) {
22  entry:
23    %cmp = fcmp une double %a, %b
24    br i1 %cmp, label %if.then, label %return
25
26  if.then:
27    call void asm sideeffect ".space 310680", "~{$1}"()
28    ret i32 0
29
30  return:
31    ret i32 1
32  }
33
34...
35---
36name:            a
37alignment:       2
38exposesReturnsTwice: false
39legalized:       false
40regBankSelected: false
41selected:        false
42failedISel:      false
43tracksRegLiveness: true
44registers:
45liveins:
46  - { reg: '$d6', virtual-reg: '' }
47  - { reg: '$d7', virtual-reg: '' }
48frameInfo:
49  isFrameAddressTaken: false
50  isReturnAddressTaken: false
51  hasStackMap:     false
52  hasPatchPoint:   false
53  stackSize:       0
54  offsetAdjustment: 0
55  maxAlignment:    1
56  adjustsStack:    false
57  hasCalls:        false
58  stackProtector:  ''
59  maxCallFrameSize: 0
60  hasOpaqueSPAdjustment: false
61  hasVAStart:      false
62  hasMustTailInVarArgFunc: false
63  localFrameSize:  0
64  savePoint:       ''
65  restorePoint:    ''
66fixedStack:
67stack:
68constants:
69body:             |
70  ; MIPS-LABEL: name: a
71  ; MIPS: bb.0.entry:
72  ; MIPS:   successors: %bb.2(0x50000000), %bb.1(0x30000000)
73  ; MIPS:   FCMP_D32 killed renamable $d6, killed renamable $d7, 2, implicit-def $fcc0
74  ; MIPS:   BC1F $fcc0, %bb.2, implicit-def $at {
75  ; MIPS:     NOP
76  ; MIPS:   }
77  ; MIPS: bb.1.entry:
78  ; MIPS:   successors: %bb.3(0x80000000)
79  ; MIPS:   J %bb.3, implicit-def $at {
80  ; MIPS:     NOP
81  ; MIPS:   }
82  ; MIPS: bb.2.if.then:
83  ; MIPS:   INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
84  ; MIPS:   PseudoReturn undef $ra, implicit killed $v0 {
85  ; MIPS:     $v0 = ADDiu $zero, 0
86  ; MIPS:   }
87  ; MIPS: bb.3.return:
88  ; MIPS:   PseudoReturn undef $ra, implicit killed $v0 {
89  ; MIPS:     $v0 = ADDiu $zero, 1
90  ; MIPS:   }
91  ; PIC-LABEL: name: a
92  ; PIC: bb.0.entry:
93  ; PIC:   successors: %bb.3(0x50000000), %bb.1(0x30000000)
94  ; PIC:   FCMP_D32 killed renamable $d6, killed renamable $d7, 2, implicit-def $fcc0
95  ; PIC:   BC1F $fcc0, %bb.3, implicit-def $at {
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:   BAL_BR %bb.2, implicit-def $ra {
104  ; PIC:     $at = LONG_BRANCH_ADDiu $at, target-flags(mips-abs-lo) %bb.4, %bb.2
105  ; PIC:   }
106  ; PIC: bb.2.entry:
107  ; PIC:   successors: %bb.4(0x80000000)
108  ; PIC:   $at = ADDu $ra, $at
109  ; PIC:   $ra = LW $sp, 0
110  ; PIC:   JR $at {
111  ; PIC:     $sp = ADDiu $sp, 8
112  ; PIC:   }
113  ; PIC: bb.3.if.then:
114  ; PIC:   INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
115  ; PIC:   PseudoReturn undef $ra, implicit killed $v0 {
116  ; PIC:     $v0 = ADDiu $zero, 0
117  ; PIC:   }
118  ; PIC: bb.4.return:
119  ; PIC:   PseudoReturn undef $ra, implicit killed $v0 {
120  ; PIC:     $v0 = ADDiu $zero, 1
121  ; PIC:   }
122  bb.0.entry:
123    successors: %bb.1(0x50000000), %bb.2(0x30000000)
124    liveins: $d6, $d7
125
126    FCMP_D32 killed renamable $d6, killed renamable $d7, 2, implicit-def $fcc0
127    BC1T killed $fcc0, %bb.2, implicit-def $at
128
129  bb.1.if.then:
130    INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
131    $v0 = ADDiu $zero, 0
132    PseudoReturn undef $ra, implicit killed $v0
133
134  bb.2.return:
135    $v0 = ADDiu $zero, 1
136    PseudoReturn undef $ra, implicit killed $v0
137
138...
139---
140name:            b
141alignment:       2
142exposesReturnsTwice: false
143legalized:       false
144regBankSelected: false
145selected:        false
146failedISel:      false
147tracksRegLiveness: true
148registers:
149liveins:
150  - { reg: '$d6', virtual-reg: '' }
151  - { reg: '$d7', virtual-reg: '' }
152frameInfo:
153  isFrameAddressTaken: false
154  isReturnAddressTaken: false
155  hasStackMap:     false
156  hasPatchPoint:   false
157  stackSize:       0
158  offsetAdjustment: 0
159  maxAlignment:    1
160  adjustsStack:    false
161  hasCalls:        false
162  stackProtector:  ''
163  maxCallFrameSize: 0
164  hasOpaqueSPAdjustment: false
165  hasVAStart:      false
166  hasMustTailInVarArgFunc: false
167  localFrameSize:  0
168  savePoint:       ''
169  restorePoint:    ''
170fixedStack:
171stack:
172constants:
173body:             |
174  ; MIPS-LABEL: name: b
175  ; MIPS: bb.0.entry:
176  ; MIPS:   successors: %bb.2(0x50000000), %bb.1(0x30000000)
177  ; MIPS:   FCMP_D32 killed renamable $d6, killed renamable $d7, 2, implicit-def $fcc0
178  ; MIPS:   BC1T $fcc0, %bb.2, implicit-def $at {
179  ; MIPS:     NOP
180  ; MIPS:   }
181  ; MIPS: bb.1.entry:
182  ; MIPS:   successors: %bb.3(0x80000000)
183  ; MIPS:   J %bb.3, implicit-def $at {
184  ; MIPS:     NOP
185  ; MIPS:   }
186  ; MIPS: bb.2.if.then:
187  ; MIPS:   INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
188  ; MIPS:   PseudoReturn undef $ra, implicit killed $v0 {
189  ; MIPS:     $v0 = ADDiu $zero, 0
190  ; MIPS:   }
191  ; MIPS: bb.3.return:
192  ; MIPS:   PseudoReturn undef $ra, implicit killed $v0 {
193  ; MIPS:     $v0 = ADDiu $zero, 1
194  ; MIPS:   }
195  ; PIC-LABEL: name: b
196  ; PIC: bb.0.entry:
197  ; PIC:   successors: %bb.3(0x50000000), %bb.1(0x30000000)
198  ; PIC:   FCMP_D32 killed renamable $d6, killed renamable $d7, 2, implicit-def $fcc0
199  ; PIC:   BC1T $fcc0, %bb.3, implicit-def $at {
200  ; PIC:     NOP
201  ; PIC:   }
202  ; PIC: bb.1.entry:
203  ; PIC:   successors: %bb.2(0x80000000)
204  ; PIC:   $sp = ADDiu $sp, -8
205  ; PIC:   SW $ra, $sp, 0
206  ; PIC:   $at = LONG_BRANCH_LUi target-flags(mips-abs-hi) %bb.4, %bb.2
207  ; PIC:   BAL_BR %bb.2, implicit-def $ra {
208  ; PIC:     $at = LONG_BRANCH_ADDiu $at, target-flags(mips-abs-lo) %bb.4, %bb.2
209  ; PIC:   }
210  ; PIC: bb.2.entry:
211  ; PIC:   successors: %bb.4(0x80000000)
212  ; PIC:   $at = ADDu $ra, $at
213  ; PIC:   $ra = LW $sp, 0
214  ; PIC:   JR $at {
215  ; PIC:     $sp = ADDiu $sp, 8
216  ; PIC:   }
217  ; PIC: bb.3.if.then:
218  ; PIC:   INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
219  ; PIC:   PseudoReturn undef $ra, implicit killed $v0 {
220  ; PIC:     $v0 = ADDiu $zero, 0
221  ; PIC:   }
222  ; PIC: bb.4.return:
223  ; PIC:   PseudoReturn undef $ra, implicit killed $v0 {
224  ; PIC:     $v0 = ADDiu $zero, 1
225  ; PIC:   }
226  bb.0.entry:
227    successors: %bb.1(0x50000000), %bb.2(0x30000000)
228    liveins: $d6, $d7
229
230    FCMP_D32 killed renamable $d6, killed renamable $d7, 2, implicit-def $fcc0
231    BC1F killed $fcc0, %bb.2, implicit-def $at
232
233  bb.1.if.then:
234    INLINEASM &".space 310680", 1, 12, implicit-def dead early-clobber $at
235    $v0 = ADDiu $zero, 0
236    PseudoReturn undef $ra, implicit killed $v0
237
238  bb.2.return:
239    $v0 = ADDiu $zero, 1
240    PseudoReturn undef $ra, implicit killed $v0
241
242...
243