[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / X86 / 2008-04-28-CoalescerBug.ll
blob8e6d2c11b7b3dcf324b7b83f03d5f420d8998349
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s
4         %struct.BITMAP = type { i16, i16, i32, i32, i32, i32, i32, i32, ptr, ptr }
5         %struct.BltData = type { float, float, float, float }
6         %struct.BltDepth = type { i32, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr }
7         %struct.BltImg = type { i32, i8, i8, i8, float, ptr, ptr, i32, i32, ptr, ptr, ptr }
8         %struct.BltOp = type { i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, ptr }
9         %struct.BltSh = type { i8, i8, i8, i8, float, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, ptr }
11 define void @t(ptr %depth, ptr %bop, i32 %mode) nounwind  {
12 ; CHECK-LABEL: t:
13 ; CHECK:       ## %bb.0: ## %entry
14 ; CHECK-NEXT:    cmpl $18, %edx
15 ; CHECK-NEXT:    je LBB0_3
16 ; CHECK-NEXT:  ## %bb.1: ## %entry
17 ; CHECK-NEXT:    cmpl $1, %edx
18 ; CHECK-NEXT:    jne LBB0_10
19 ; CHECK-NEXT:    .p2align 4, 0x90
20 ; CHECK-NEXT:  LBB0_2: ## %bb2898.us
21 ; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=1
22 ; CHECK-NEXT:    jmp LBB0_2
23 ; CHECK-NEXT:  LBB0_3: ## %bb13086.preheader
24 ; CHECK-NEXT:    movb $1, %al
25 ; CHECK-NEXT:    .p2align 4, 0x90
26 ; CHECK-NEXT:  LBB0_4: ## %bb13088
27 ; CHECK-NEXT:    ## =>This Inner Loop Header: Depth=1
28 ; CHECK-NEXT:    testb %al, %al
29 ; CHECK-NEXT:    jne LBB0_5
30 ; CHECK-NEXT:  ## %bb.6: ## %bb13101
31 ; CHECK-NEXT:    ## in Loop: Header=BB0_4 Depth=1
32 ; CHECK-NEXT:    xorl %ecx, %ecx
33 ; CHECK-NEXT:    jmp LBB0_7
34 ; CHECK-NEXT:    .p2align 4, 0x90
35 ; CHECK-NEXT:  LBB0_5: ## in Loop: Header=BB0_4 Depth=1
36 ; CHECK-NEXT:    movl $65535, %ecx ## imm = 0xFFFF
37 ; CHECK-NEXT:  LBB0_7: ## %bb13107
38 ; CHECK-NEXT:    ## in Loop: Header=BB0_4 Depth=1
39 ; CHECK-NEXT:    movl %ecx, %edx
40 ; CHECK-NEXT:    shll $16, %edx
41 ; CHECK-NEXT:    subl %ecx, %edx
42 ; CHECK-NEXT:    incl %edx
43 ; CHECK-NEXT:    shrl $16, %edx
44 ; CHECK-NEXT:    subl %edx, %ecx
45 ; CHECK-NEXT:    testw %cx, %cx
46 ; CHECK-NEXT:    je LBB0_4
47 ; CHECK-NEXT:  ## %bb.8: ## %bb13236
48 ; CHECK-NEXT:    ## in Loop: Header=BB0_4 Depth=1
49 ; CHECK-NEXT:    testb %al, %al
50 ; CHECK-NEXT:    jne LBB0_4
51 ; CHECK-NEXT:  ## %bb.9: ## %bb13572
52 ; CHECK-NEXT:    ## in Loop: Header=BB0_4 Depth=1
53 ; CHECK-NEXT:    movzwl %cx, %ecx
54 ; CHECK-NEXT:    movl %ecx, %edx
55 ; CHECK-NEXT:    shll $16, %edx
56 ; CHECK-NEXT:    subl %ecx, %edx
57 ; CHECK-NEXT:    incl %edx
58 ; CHECK-NEXT:    shrl $16, %edx
59 ; CHECK-NEXT:    movw %dx, 0
60 ; CHECK-NEXT:    jmp LBB0_4
61 ; CHECK-NEXT:  LBB0_10: ## %return
62 ; CHECK-NEXT:    retq
63 entry:
64         switch i32 %mode, label %return [
65                  i32 1, label %bb2898.us
66                  i32 18, label %bb13086.preheader
67         ]
69 bb13086.preheader:              ; preds = %entry
70         %tmp13098 = icmp eq i32 0, 0            ; <i1> [#uses=1]
71         %tmp13238 = icmp eq i32 0, 0            ; <i1> [#uses=1]
72         br label %bb13088
74 bb2898.us:              ; preds = %bb2898.us, %entry
75         br label %bb2898.us
77 bb13088:                ; preds = %bb13572, %bb13567, %bb13107, %bb13086.preheader
78         br i1 %tmp13098, label %bb13107, label %bb13101
80 bb13101:                ; preds = %bb13088
81         br label %bb13107
83 bb13107:                ; preds = %bb13101, %bb13088
84         %iftmp.684.0 = phi i32 [ 0, %bb13101 ], [ 65535, %bb13088 ]             ; <i32> [#uses=2]
85         %tmp13111 = load i64, ptr null, align 8         ; <i64> [#uses=3]
86         %tmp13116 = lshr i64 %tmp13111, 16              ; <i64> [#uses=1]
87         %tmp1311613117 = trunc i64 %tmp13116 to i32             ; <i32> [#uses=1]
88         %tmp13118 = and i32 %tmp1311613117, 65535               ; <i32> [#uses=1]
89         %tmp13120 = lshr i64 %tmp13111, 32              ; <i64> [#uses=1]
90         %tmp1312013121 = trunc i64 %tmp13120 to i32             ; <i32> [#uses=1]
91         %tmp13122 = and i32 %tmp1312013121, 65535               ; <i32> [#uses=2]
92         %tmp13124 = lshr i64 %tmp13111, 48              ; <i64> [#uses=1]
93         %tmp1312413125 = trunc i64 %tmp13124 to i32             ; <i32> [#uses=2]
94         %tmp1314013141not = xor i16 0, -1               ; <i16> [#uses=1]
95         %tmp1314013141not13142 = zext i16 %tmp1314013141not to i32              ; <i32> [#uses=3]
96         %tmp13151 = mul i32 %tmp13122, %tmp1314013141not13142           ; <i32> [#uses=1]
97         %tmp13154 = mul i32 %tmp1312413125, %tmp1314013141not13142              ; <i32> [#uses=1]
98         %tmp13157 = mul i32 %iftmp.684.0, %tmp1314013141not13142                ; <i32> [#uses=1]
99         %tmp13171 = add i32 %tmp13151, 1                ; <i32> [#uses=1]
100         %tmp13172 = add i32 %tmp13171, 0                ; <i32> [#uses=1]
101         %tmp13176 = add i32 %tmp13154, 1                ; <i32> [#uses=1]
102         %tmp13177 = add i32 %tmp13176, 0                ; <i32> [#uses=1]
103         %tmp13181 = add i32 %tmp13157, 1                ; <i32> [#uses=1]
104         %tmp13182 = add i32 %tmp13181, 0                ; <i32> [#uses=1]
105         %tmp13188 = lshr i32 %tmp13172, 16              ; <i32> [#uses=1]
106         %tmp13190 = lshr i32 %tmp13177, 16              ; <i32> [#uses=1]
107         %tmp13192 = lshr i32 %tmp13182, 16              ; <i32> [#uses=1]
108         %tmp13198 = sub i32 %tmp13118, 0                ; <i32> [#uses=1]
109         %tmp13201 = sub i32 %tmp13122, %tmp13188                ; <i32> [#uses=1]
110         %tmp13204 = sub i32 %tmp1312413125, %tmp13190           ; <i32> [#uses=1]
111         %tmp13207 = sub i32 %iftmp.684.0, %tmp13192             ; <i32> [#uses=1]
112         %tmp1320813209 = zext i32 %tmp13204 to i64              ; <i64> [#uses=1]
113         %tmp13211 = shl i64 %tmp1320813209, 48          ; <i64> [#uses=1]
114         %tmp1321213213 = zext i32 %tmp13201 to i64              ; <i64> [#uses=1]
115         %tmp13214 = shl i64 %tmp1321213213, 32          ; <i64> [#uses=1]
116         %tmp13215 = and i64 %tmp13214, 281470681743360          ; <i64> [#uses=1]
117         %tmp1321713218 = zext i32 %tmp13198 to i64              ; <i64> [#uses=1]
118         %tmp13219 = shl i64 %tmp1321713218, 16          ; <i64> [#uses=1]
119         %tmp13220 = and i64 %tmp13219, 4294901760               ; <i64> [#uses=1]
120         %tmp13216 = or i64 %tmp13211, 0         ; <i64> [#uses=1]
121         %tmp13221 = or i64 %tmp13216, %tmp13215         ; <i64> [#uses=1]
122         %tmp13225 = or i64 %tmp13221, %tmp13220         ; <i64> [#uses=4]
123         %tmp1322713228 = trunc i32 %tmp13207 to i16             ; <i16> [#uses=4]
124         %tmp13233 = icmp eq i16 %tmp1322713228, 0               ; <i1> [#uses=1]
125         br i1 %tmp13233, label %bb13088, label %bb13236
127 bb13236:                ; preds = %bb13107
128         br i1 false, label %bb13567, label %bb13252
130 bb13252:                ; preds = %bb13236
131         %tmp1329013291 = zext i16 %tmp1322713228 to i64         ; <i64> [#uses=8]
132         %tmp13296 = lshr i64 %tmp13225, 16              ; <i64> [#uses=1]
133         %tmp13297 = and i64 %tmp13296, 65535            ; <i64> [#uses=1]
134         %tmp13299 = lshr i64 %tmp13225, 32              ; <i64> [#uses=1]
135         %tmp13300 = and i64 %tmp13299, 65535            ; <i64> [#uses=1]
136         %tmp13302 = lshr i64 %tmp13225, 48              ; <i64> [#uses=1]
137         %tmp13306 = sub i64 %tmp1329013291, 0           ; <i64> [#uses=0]
138         %tmp13309 = sub i64 %tmp1329013291, %tmp13297           ; <i64> [#uses=1]
139         %tmp13312 = sub i64 %tmp1329013291, %tmp13300           ; <i64> [#uses=1]
140         %tmp13315 = sub i64 %tmp1329013291, %tmp13302           ; <i64> [#uses=1]
141         %tmp13318 = mul i64 %tmp1329013291, %tmp1329013291              ; <i64> [#uses=1]
142         br i1 false, label %bb13339, label %bb13324
144 bb13324:                ; preds = %bb13252
145         br i1 false, label %bb13339, label %bb13330
147 bb13330:                ; preds = %bb13324
148         %tmp13337 = sdiv i64 0, 0               ; <i64> [#uses=1]
149         br label %bb13339
151 bb13339:                ; preds = %bb13330, %bb13324, %bb13252
152         %r0120.0 = phi i64 [ %tmp13337, %bb13330 ], [ 0, %bb13252 ], [ 4294836225, %bb13324 ]           ; <i64> [#uses=1]
153         br i1 false, label %bb13360, label %bb13345
155 bb13345:                ; preds = %bb13339
156         br i1 false, label %bb13360, label %bb13351
158 bb13351:                ; preds = %bb13345
159         %tmp13354 = mul i64 0, %tmp13318                ; <i64> [#uses=1]
160         %tmp13357 = sub i64 %tmp1329013291, %tmp13309           ; <i64> [#uses=1]
161         %tmp13358 = sdiv i64 %tmp13354, %tmp13357               ; <i64> [#uses=1]
162         br label %bb13360
164 bb13360:                ; preds = %bb13351, %bb13345, %bb13339
165         %r1121.0 = phi i64 [ %tmp13358, %bb13351 ], [ 0, %bb13339 ], [ 4294836225, %bb13345 ]           ; <i64> [#uses=1]
166         br i1 false, label %bb13402, label %bb13387
168 bb13387:                ; preds = %bb13360
169         br label %bb13402
171 bb13402:                ; preds = %bb13387, %bb13360
172         %r3123.0 = phi i64 [ 0, %bb13360 ], [ 4294836225, %bb13387 ]            ; <i64> [#uses=1]
173         %tmp13404 = icmp eq i16 %tmp1322713228, -1              ; <i1> [#uses=1]
174         br i1 %tmp13404, label %bb13435, label %bb13407
176 bb13407:                ; preds = %bb13402
177         br label %bb13435
179 bb13435:                ; preds = %bb13407, %bb13402
180         %r0120.1 = phi i64 [ 0, %bb13407 ], [ %r0120.0, %bb13402 ]              ; <i64> [#uses=0]
181         %r1121.1 = phi i64 [ 0, %bb13407 ], [ %r1121.0, %bb13402 ]              ; <i64> [#uses=0]
182         %r3123.1 = phi i64 [ 0, %bb13407 ], [ %r3123.0, %bb13402 ]              ; <i64> [#uses=0]
183         %tmp13450 = mul i64 0, %tmp13312                ; <i64> [#uses=0]
184         %tmp13455 = mul i64 0, %tmp13315                ; <i64> [#uses=0]
185         %tmp13461 = add i64 0, %tmp1329013291           ; <i64> [#uses=1]
186         %tmp13462 = mul i64 %tmp13461, 65535            ; <i64> [#uses=1]
187         %tmp13466 = sub i64 %tmp13462, 0                ; <i64> [#uses=1]
188         %tmp13526 = add i64 %tmp13466, 1                ; <i64> [#uses=1]
189         %tmp13527 = add i64 %tmp13526, 0                ; <i64> [#uses=1]
190         %tmp13528 = ashr i64 %tmp13527, 16              ; <i64> [#uses=4]
191         %tmp13536 = sub i64 %tmp13528, 0                ; <i64> [#uses=1]
192         %tmp13537 = shl i64 %tmp13536, 32               ; <i64> [#uses=1]
193         %tmp13538 = and i64 %tmp13537, 281470681743360          ; <i64> [#uses=1]
194         %tmp13542 = sub i64 %tmp13528, 0                ; <i64> [#uses=1]
195         %tmp13543 = shl i64 %tmp13542, 16               ; <i64> [#uses=1]
196         %tmp13544 = and i64 %tmp13543, 4294901760               ; <i64> [#uses=1]
197         %tmp13548 = sub i64 %tmp13528, 0                ; <i64> [#uses=1]
198         %tmp13549 = and i64 %tmp13548, 65535            ; <i64> [#uses=1]
199         %tmp13539 = or i64 %tmp13538, 0         ; <i64> [#uses=1]
200         %tmp13545 = or i64 %tmp13539, %tmp13549         ; <i64> [#uses=1]
201         %tmp13550 = or i64 %tmp13545, %tmp13544         ; <i64> [#uses=1]
202         %tmp1355213553 = trunc i64 %tmp13528 to i16             ; <i16> [#uses=1]
203         br label %bb13567
205 bb13567:                ; preds = %bb13435, %bb13236
206         %tsp1040.0.0 = phi i64 [ %tmp13550, %bb13435 ], [ %tmp13225, %bb13236 ]         ; <i64> [#uses=0]
207         %tsp1040.1.0 = phi i16 [ %tmp1355213553, %bb13435 ], [ %tmp1322713228, %bb13236 ]               ; <i16> [#uses=1]
208         br i1 %tmp13238, label %bb13088, label %bb13572
210 bb13572:                ; preds = %bb13567
211         store i16 %tsp1040.1.0, ptr null, align 2
212         br label %bb13088
214 return:         ; preds = %entry
215         ret void