]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/Mips/longbranch/branch-limits-fp-micromipsr6.mir
Vendor import of llvm trunk r338150:
[FreeBSD/FreeBSD.git] / test / CodeGen / Mips / longbranch / branch-limits-fp-micromipsr6.mir
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=mips-img-linux-gnu -mcpu=mips32r6 -mattr=+micromips %s -o - -start-before mips-delay-slot-filler -stop-after mips-branch-expansion | FileCheck %s --check-prefix=MM
3 # RUN: llc -mtriple=mips-img-linux-gnu -mcpu=mips32r6 -mattr=+micromips %s -o - -start-before mips-delay-slot-filler -stop-after mips-branch-expansion -relocation-model=pic | FileCheck %s --check-prefix=PIC
4
5 # Test the long branch expansion of various branches
6
7 --- |
8
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
13
14   if.then:
15     call void asm sideeffect ".space 810680", "~{$1}"()
16     ret i32 0
17
18   return:
19     ret i32 1
20   }
21
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
26
27   if.then:
28     call void asm sideeffect ".space 810680", "~{$1}"()
29     ret i32 0
30
31   return:
32     ret i32 1
33   }
34
35 ...
36 ---
37 name:            a
38 alignment:       2
39 exposesReturnsTwice: false
40 legalized:       false
41 regBankSelected: false
42 selected:        false
43 failedISel:      false
44 tracksRegLiveness: true
45 registers:
46 liveins:
47   - { reg: '$d12_64', virtual-reg: '' }
48   - { reg: '$d14_64', virtual-reg: '' }
49 frameInfo:
50   isFrameAddressTaken: false
51   isReturnAddressTaken: false
52   hasStackMap:     false
53   hasPatchPoint:   false
54   stackSize:       0
55   offsetAdjustment: 0
56   maxAlignment:    1
57   adjustsStack:    false
58   hasCalls:        false
59   stackProtector:  ''
60   maxCallFrameSize: 0
61   hasOpaqueSPAdjustment: false
62   hasVAStart:      false
63   hasMustTailInVarArgFunc: false
64   localFrameSize:  0
65   savePoint:       ''
66   restorePoint:    ''
67 fixedStack:
68 stack:
69 constants:
70 body:             |
71   ; MM-LABEL: name: a
72   ; MM: bb.0.entry:
73   ; MM:   successors: %bb.2(0x50000000), %bb.1(0x30000000)
74   ; MM:   $f0 = CMP_EQ_D_MMR6 killed $d12_64, killed $d14_64
75   ; MM:   BC1EQZC_MMR6 $d0_64, %bb.2, implicit-def $at
76   ; MM: bb.1.entry:
77   ; MM:   successors: %bb.3(0x80000000)
78   ; MM:   BC_MMR6 %bb.3
79   ; MM: bb.2.if.then:
80   ; MM:   INLINEASM &".space 810680", 1, 12, implicit-def dead early-clobber $at
81   ; MM:   $v0 = LI16_MM 0
82   ; MM:   JRC16_MM undef $ra, implicit $v0
83   ; MM: bb.3.return:
84   ; MM:   $v0 = LI16_MM 1
85   ; MM:   JRC16_MM undef $ra, implicit $v0
86   ; PIC-LABEL: name: a
87   ; PIC: bb.0.entry:
88   ; PIC:   successors: %bb.3(0x50000000), %bb.1(0x30000000)
89   ; PIC:   $f0 = CMP_EQ_D_MMR6 killed $d12_64, killed $d14_64
90   ; PIC:   BC1EQZC_MMR6 $d0_64, %bb.3, implicit-def $at
91   ; PIC: bb.1.entry:
92   ; PIC:   successors: %bb.2(0x80000000)
93   ; PIC:   $sp = ADDiu $sp, -8
94   ; PIC:   SW $ra, $sp, 0
95   ; PIC:   $at = LONG_BRANCH_LUi target-flags(mips-abs-hi) %bb.4, %bb.2
96   ; PIC:   $at = LONG_BRANCH_ADDiu $at, target-flags(mips-abs-lo) %bb.4, %bb.2
97   ; PIC:   BALC_MMR6 %bb.2, implicit-def $ra
98   ; PIC: bb.2.entry:
99   ; PIC:   successors: %bb.4(0x80000000)
100   ; PIC:   $at = ADDu $ra, $at
101   ; PIC:   $ra = LW $sp, 0
102   ; PIC:   $sp = ADDiu $sp, 8
103   ; PIC:   JIC_MMR6 $at, 0, implicit-def $at
104   ; PIC: bb.3.if.then:
105   ; PIC:   INLINEASM &".space 810680", 1, 12, implicit-def dead early-clobber $at
106   ; PIC:   $v0 = LI16_MM 0
107   ; PIC:   JRC16_MM undef $ra, implicit $v0
108   ; PIC: bb.4.return:
109   ; PIC:   $v0 = LI16_MM 1
110   ; PIC:   JRC16_MM undef $ra, implicit $v0
111   bb.0.entry:
112     successors: %bb.1(0x50000000), %bb.2(0x30000000)
113     liveins: $d12_64, $d14_64
114
115     $f0 = CMP_EQ_D_MMR6 killed $d12_64, killed $d14_64
116     BC1NEZC_MMR6 killed $d0_64, %bb.2, implicit-def $at
117
118   bb.1.if.then:
119     INLINEASM &".space 810680", 1, 12, implicit-def dead early-clobber $at
120     $v0 = LI16_MM 0
121     PseudoReturn undef $ra, implicit $v0
122
123   bb.2.return:
124     $v0 = LI16_MM 1
125     PseudoReturn undef $ra, implicit $v0
126
127 ...
128 ---
129 name:            b
130 alignment:       2
131 exposesReturnsTwice: false
132 legalized:       false
133 regBankSelected: false
134 selected:        false
135 failedISel:      false
136 tracksRegLiveness: true
137 registers:
138 liveins:
139   - { reg: '$d12_64', virtual-reg: '' }
140   - { reg: '$d14_64', virtual-reg: '' }
141 frameInfo:
142   isFrameAddressTaken: false
143   isReturnAddressTaken: false
144   hasStackMap:     false
145   hasPatchPoint:   false
146   stackSize:       0
147   offsetAdjustment: 0
148   maxAlignment:    1
149   adjustsStack:    false
150   hasCalls:        false
151   stackProtector:  ''
152   maxCallFrameSize: 0
153   hasOpaqueSPAdjustment: false
154   hasVAStart:      false
155   hasMustTailInVarArgFunc: false
156   localFrameSize:  0
157   savePoint:       ''
158   restorePoint:    ''
159 fixedStack:
160 stack:
161 constants:
162 body:             |
163   ; MM-LABEL: name: b
164   ; MM: bb.0.entry:
165   ; MM:   successors: %bb.2(0x30000000), %bb.1(0x50000000)
166   ; MM:   $f0 = CMP_UEQ_D_MMR6 killed $d12_64, killed $d14_64
167   ; MM:   BC1NEZC_MMR6 $d0_64, %bb.2, implicit-def $at
168   ; MM: bb.1.entry:
169   ; MM:   successors: %bb.3(0x80000000)
170   ; MM:   BC_MMR6 %bb.3
171   ; MM: bb.2.if.then:
172   ; MM:   INLINEASM &".space 810680", 1, 12, implicit-def dead early-clobber $at
173   ; MM:   $v0 = LI16_MM 0
174   ; MM:   JRC16_MM undef $ra, implicit $v0
175   ; MM: bb.3.return:
176   ; MM:   $v0 = LI16_MM 1
177   ; MM:   JRC16_MM undef $ra, implicit $v0
178   ; PIC-LABEL: name: b
179   ; PIC: bb.0.entry:
180   ; PIC:   successors: %bb.3(0x30000000), %bb.1(0x50000000)
181   ; PIC:   $f0 = CMP_UEQ_D_MMR6 killed $d12_64, killed $d14_64
182   ; PIC:   BC1NEZC_MMR6 $d0_64, %bb.3, implicit-def $at
183   ; PIC: bb.1.entry:
184   ; PIC:   successors: %bb.2(0x80000000)
185   ; PIC:   $sp = ADDiu $sp, -8
186   ; PIC:   SW $ra, $sp, 0
187   ; PIC:   $at = LONG_BRANCH_LUi target-flags(mips-abs-hi) %bb.4, %bb.2
188   ; PIC:   $at = LONG_BRANCH_ADDiu $at, target-flags(mips-abs-lo) %bb.4, %bb.2
189   ; PIC:   BALC_MMR6 %bb.2, implicit-def $ra
190   ; PIC: bb.2.entry:
191   ; PIC:   successors: %bb.4(0x80000000)
192   ; PIC:   $at = ADDu $ra, $at
193   ; PIC:   $ra = LW $sp, 0
194   ; PIC:   $sp = ADDiu $sp, 8
195   ; PIC:   JIC_MMR6 $at, 0, implicit-def $at
196   ; PIC: bb.3.if.then:
197   ; PIC:   INLINEASM &".space 810680", 1, 12, implicit-def dead early-clobber $at
198   ; PIC:   $v0 = LI16_MM 0
199   ; PIC:   JRC16_MM undef $ra, implicit $v0
200   ; PIC: bb.4.return:
201   ; PIC:   $v0 = LI16_MM 1
202   ; PIC:   JRC16_MM undef $ra, implicit $v0
203   bb.0.entry:
204     successors: %bb.1(0x30000000), %bb.2(0x50000000)
205     liveins: $d12_64, $d14_64
206
207     $f0 = CMP_UEQ_D_MMR6 killed $d12_64, killed $d14_64
208     BC1EQZC_MMR6 killed $d0_64, %bb.2, implicit-def $at
209
210   bb.1.if.then:
211     INLINEASM &".space 810680", 1, 12, implicit-def dead early-clobber $at
212     $v0 = LI16_MM 0
213     PseudoReturn undef $ra, implicit $v0
214
215   bb.2.return:
216     $v0 = LI16_MM 1
217     PseudoReturn undef $ra, implicit $v0
218
219 ...