Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / X86 / 2008-05-12-tailmerge-5.ll
blob0d63779227554cf92266d85f083e7416336edb5f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s | FileCheck %s
3 ; Calls to abort should all be merged
5 ; ModuleID = '5898899.c'
6 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
7 target triple = "x86_64-apple-darwin8"
8         %struct.BoundaryAlignment = type { [3 x i8], i8, i16, i16, i8, [2 x i8] }
10 define void @passing2(i64 %str.0, i64 %str.1, i16 signext  %s, i32 %j, i8 signext  %c, i16 signext  %t, i16 signext  %u, i8 signext  %d) nounwind optsize {
11 ; CHECK-LABEL: passing2:
12 ; CHECK:       ## %bb.0: ## %entry
13 ; CHECK-NEXT:    subq $40, %rsp
14 ; CHECK-NEXT:    movq %rsi, %rax
15 ; CHECK-NEXT:    movq %rdi, {{[0-9]+}}(%rsp)
16 ; CHECK-NEXT:    movb %al, {{[0-9]+}}(%rsp)
17 ; CHECK-NEXT:    movb %ah, {{[0-9]+}}(%rsp)
18 ; CHECK-NEXT:    shrq $16, %rax
19 ; CHECK-NEXT:    movb %al, {{[0-9]+}}(%rsp)
20 ; CHECK-NEXT:    movb %ah, {{[0-9]+}}(%rsp)
21 ; CHECK-NEXT:    movw %dx, {{[0-9]+}}(%rsp)
22 ; CHECK-NEXT:    movl %ecx, {{[0-9]+}}(%rsp)
23 ; CHECK-NEXT:    movb %r8b, {{[0-9]+}}(%rsp)
24 ; CHECK-NEXT:    movw %r9w, {{[0-9]+}}(%rsp)
25 ; CHECK-NEXT:    shll $14, %edi
26 ; CHECK-NEXT:    sarl $23, %edi
27 ; CHECK-NEXT:    cmpl %ecx, %edi
28 ; CHECK-NEXT:    jne LBB0_6
29 ; CHECK-NEXT:  ## %bb.1: ## %bb27
30 ; CHECK-NEXT:    movb {{[0-9]+}}(%rsp), %al
31 ; CHECK-NEXT:    cmpb {{[0-9]+}}(%rsp), %al
32 ; CHECK-NEXT:    jne LBB0_6
33 ; CHECK-NEXT:  ## %bb.2: ## %bb35
34 ; CHECK-NEXT:    movl {{[0-9]+}}(%rsp), %eax
35 ; CHECK-NEXT:    shll $7, %eax
36 ; CHECK-NEXT:    cwtl
37 ; CHECK-NEXT:    shrl $7, %eax
38 ; CHECK-NEXT:    cmpw {{[0-9]+}}(%rsp), %ax
39 ; CHECK-NEXT:    jne LBB0_6
40 ; CHECK-NEXT:  ## %bb.3: ## %bb51
41 ; CHECK-NEXT:    movl {{[0-9]+}}(%rsp), %eax
42 ; CHECK-NEXT:    shll $7, %eax
43 ; CHECK-NEXT:    cwtl
44 ; CHECK-NEXT:    shrl $7, %eax
45 ; CHECK-NEXT:    cmpw {{[0-9]+}}(%rsp), %ax
46 ; CHECK-NEXT:    jne LBB0_6
47 ; CHECK-NEXT:  ## %bb.4: ## %bb67
48 ; CHECK-NEXT:    movb {{[0-9]+}}(%rsp), %al
49 ; CHECK-NEXT:    cmpb {{[0-9]+}}(%rsp), %al
50 ; CHECK-NEXT:    jne LBB0_6
51 ; CHECK-NEXT:  ## %bb.5: ## %bb75
52 ; CHECK-NEXT:    addq $40, %rsp
53 ; CHECK-NEXT:    retq
54 ; CHECK-NEXT:  LBB0_6: ## %bb
55 ; CHECK-NEXT:    xorl %eax, %eax
56 ; CHECK-NEXT:    callq _abort
57 entry:
58         %str_addr = alloca %struct.BoundaryAlignment            ; <ptr> [#uses=7]
59         %s_addr = alloca i16            ; <ptr> [#uses=1]
60         %j_addr = alloca i32            ; <ptr> [#uses=2]
61         %c_addr = alloca i8             ; <ptr> [#uses=2]
62         %t_addr = alloca i16            ; <ptr> [#uses=2]
63         %u_addr = alloca i16            ; <ptr> [#uses=2]
64         %d_addr = alloca i8             ; <ptr> [#uses=2]
65         %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
66         %tmp1 = getelementptr { i64, i64 }, ptr %str_addr, i32 0, i32 0         ; <ptr> [#uses=1]
67         store i64 %str.0, ptr %tmp1
68         %tmp3 = getelementptr { i64, i64 }, ptr %str_addr, i32 0, i32 1         ; <ptr> [#uses=1]
69         %byte = trunc i64 %str.1 to i8          ; <i8> [#uses=1]
70         store i8 %byte, ptr %tmp3
71         %shft = lshr i64 %str.1, 8              ; <i64> [#uses=2]
72         %Loc = getelementptr i8, ptr %tmp3, i32 1               ; <ptr> [#uses=2]
73         %byte4 = trunc i64 %shft to i8          ; <i8> [#uses=1]
74         store i8 %byte4, ptr %Loc
75         %shft5 = lshr i64 %shft, 8              ; <i64> [#uses=2]
76         %Loc6 = getelementptr i8, ptr %Loc, i32 1               ; <ptr> [#uses=2]
77         %byte7 = trunc i64 %shft5 to i8         ; <i8> [#uses=1]
78         store i8 %byte7, ptr %Loc6
79         %shft8 = lshr i64 %shft5, 8             ; <i64> [#uses=2]
80         %Loc9 = getelementptr i8, ptr %Loc6, i32 1              ; <ptr> [#uses=2]
81         %byte10 = trunc i64 %shft8 to i8                ; <i8> [#uses=1]
82         store i8 %byte10, ptr %Loc9
83         %shft11 = lshr i64 %shft8, 8            ; <i64> [#uses=0]
84         %Loc12 = getelementptr i8, ptr %Loc9, i32 1             ; <ptr> [#uses=0]
85         store i16 %s, ptr %s_addr
86         store i32 %j, ptr %j_addr
87         store i8 %c, ptr %c_addr
88         store i16 %t, ptr %t_addr
89         store i16 %u, ptr %u_addr
90         store i8 %d, ptr %d_addr
91         %tmp13 = getelementptr %struct.BoundaryAlignment, ptr %str_addr, i32 0, i32 0           ; <ptr> [#uses=1]
92         %tmp15 = load i32, ptr %tmp13, align 4          ; <i32> [#uses=1]
93         %tmp16 = shl i32 %tmp15, 14             ; <i32> [#uses=1]
94         %tmp17 = ashr i32 %tmp16, 23            ; <i32> [#uses=1]
95         %tmp1718 = trunc i32 %tmp17 to i16              ; <i16> [#uses=1]
96         %sextl = shl i16 %tmp1718, 7            ; <i16> [#uses=1]
97         %sextr = ashr i16 %sextl, 7             ; <i16> [#uses=2]
98         %sextl19 = shl i16 %sextr, 7            ; <i16> [#uses=1]
99         %sextr20 = ashr i16 %sextl19, 7         ; <i16> [#uses=0]
100         %sextl21 = shl i16 %sextr, 7            ; <i16> [#uses=1]
101         %sextr22 = ashr i16 %sextl21, 7         ; <i16> [#uses=1]
102         %sextr2223 = sext i16 %sextr22 to i32           ; <i32> [#uses=1]
103         %tmp24 = load i32, ptr %j_addr, align 4         ; <i32> [#uses=1]
104         %tmp25 = icmp ne i32 %sextr2223, %tmp24         ; <i1> [#uses=1]
105         %tmp2526 = zext i1 %tmp25 to i8         ; <i8> [#uses=1]
106         %toBool = icmp ne i8 %tmp2526, 0                ; <i1> [#uses=1]
107         br i1 %toBool, label %bb, label %bb27
109 bb:             ; preds = %entry
110         call void (...) @abort( ) noreturn nounwind
111         unreachable
113 bb27:           ; preds = %entry
114         %tmp28 = getelementptr %struct.BoundaryAlignment, ptr %str_addr, i32 0, i32 1           ; <ptr> [#uses=1]
115         %tmp29 = load i8, ptr %tmp28, align 4           ; <i8> [#uses=1]
116         %tmp30 = load i8, ptr %c_addr, align 1          ; <i8> [#uses=1]
117         %tmp31 = icmp ne i8 %tmp29, %tmp30              ; <i1> [#uses=1]
118         %tmp3132 = zext i1 %tmp31 to i8         ; <i8> [#uses=1]
119         %toBool33 = icmp ne i8 %tmp3132, 0              ; <i1> [#uses=1]
120         br i1 %toBool33, label %bb34, label %bb35
122 bb34:           ; preds = %bb27
123         call void (...) @abort( ) noreturn nounwind
124         unreachable
126 bb35:           ; preds = %bb27
127         %tmp36 = getelementptr %struct.BoundaryAlignment, ptr %str_addr, i32 0, i32 2           ; <ptr> [#uses=1]
128         %tmp37 = load i16, ptr %tmp36, align 4          ; <i16> [#uses=1]
129         %tmp38 = shl i16 %tmp37, 7              ; <i16> [#uses=1]
130         %tmp39 = ashr i16 %tmp38, 7             ; <i16> [#uses=1]
131         %sextl40 = shl i16 %tmp39, 7            ; <i16> [#uses=1]
132         %sextr41 = ashr i16 %sextl40, 7         ; <i16> [#uses=2]
133         %sextl42 = shl i16 %sextr41, 7          ; <i16> [#uses=1]
134         %sextr43 = ashr i16 %sextl42, 7         ; <i16> [#uses=0]
135         %sextl44 = shl i16 %sextr41, 7          ; <i16> [#uses=1]
136         %sextr45 = ashr i16 %sextl44, 7         ; <i16> [#uses=1]
137         %tmp46 = load i16, ptr %t_addr, align 2         ; <i16> [#uses=1]
138         %tmp47 = icmp ne i16 %sextr45, %tmp46           ; <i1> [#uses=1]
139         %tmp4748 = zext i1 %tmp47 to i8         ; <i8> [#uses=1]
140         %toBool49 = icmp ne i8 %tmp4748, 0              ; <i1> [#uses=1]
141         br i1 %toBool49, label %bb50, label %bb51
143 bb50:           ; preds = %bb35
144         call void (...) @abort( ) noreturn nounwind
145         unreachable
147 bb51:           ; preds = %bb35
148         %tmp52 = getelementptr %struct.BoundaryAlignment, ptr %str_addr, i32 0, i32 3           ; <ptr> [#uses=1]
149         %tmp53 = load i16, ptr %tmp52, align 4          ; <i16> [#uses=1]
150         %tmp54 = shl i16 %tmp53, 7              ; <i16> [#uses=1]
151         %tmp55 = ashr i16 %tmp54, 7             ; <i16> [#uses=1]
152         %sextl56 = shl i16 %tmp55, 7            ; <i16> [#uses=1]
153         %sextr57 = ashr i16 %sextl56, 7         ; <i16> [#uses=2]
154         %sextl58 = shl i16 %sextr57, 7          ; <i16> [#uses=1]
155         %sextr59 = ashr i16 %sextl58, 7         ; <i16> [#uses=0]
156         %sextl60 = shl i16 %sextr57, 7          ; <i16> [#uses=1]
157         %sextr61 = ashr i16 %sextl60, 7         ; <i16> [#uses=1]
158         %tmp62 = load i16, ptr %u_addr, align 2         ; <i16> [#uses=1]
159         %tmp63 = icmp ne i16 %sextr61, %tmp62           ; <i1> [#uses=1]
160         %tmp6364 = zext i1 %tmp63 to i8         ; <i8> [#uses=1]
161         %toBool65 = icmp ne i8 %tmp6364, 0              ; <i1> [#uses=1]
162         br i1 %toBool65, label %bb66, label %bb67
164 bb66:           ; preds = %bb51
165         call void (...) @abort( ) noreturn nounwind
166         unreachable
168 bb67:           ; preds = %bb51
169         %tmp68 = getelementptr %struct.BoundaryAlignment, ptr %str_addr, i32 0, i32 4           ; <ptr> [#uses=1]
170         %tmp69 = load i8, ptr %tmp68, align 4           ; <i8> [#uses=1]
171         %tmp70 = load i8, ptr %d_addr, align 1          ; <i8> [#uses=1]
172         %tmp71 = icmp ne i8 %tmp69, %tmp70              ; <i1> [#uses=1]
173         %tmp7172 = zext i1 %tmp71 to i8         ; <i8> [#uses=1]
174         %toBool73 = icmp ne i8 %tmp7172, 0              ; <i1> [#uses=1]
175         br i1 %toBool73, label %bb74, label %bb75
177 bb74:           ; preds = %bb67
178         call void (...) @abort( ) noreturn nounwind
179         unreachable
181 bb75:           ; preds = %bb67
182         br label %return
184 return:         ; preds = %bb75
185         ret void
188 declare void @abort(...) noreturn nounwind