xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/2008-05-12-tailmerge-5.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | grep abort | count 1
2*9880d681SAndroid Build Coastguard Worker; Calls to abort should all be merged
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; ModuleID = '5898899.c'
5*9880d681SAndroid Build Coastguard Workertarget 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"
6*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-darwin8"
7*9880d681SAndroid Build Coastguard Worker	%struct.BoundaryAlignment = type { [3 x i8], i8, i16, i16, i8, [2 x i8] }
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdefine 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 {
10*9880d681SAndroid Build Coastguard Workerentry:
11*9880d681SAndroid Build Coastguard Worker	%str_addr = alloca %struct.BoundaryAlignment		; <%struct.BoundaryAlignment*> [#uses=7]
12*9880d681SAndroid Build Coastguard Worker	%s_addr = alloca i16		; <i16*> [#uses=1]
13*9880d681SAndroid Build Coastguard Worker	%j_addr = alloca i32		; <i32*> [#uses=2]
14*9880d681SAndroid Build Coastguard Worker	%c_addr = alloca i8		; <i8*> [#uses=2]
15*9880d681SAndroid Build Coastguard Worker	%t_addr = alloca i16		; <i16*> [#uses=2]
16*9880d681SAndroid Build Coastguard Worker	%u_addr = alloca i16		; <i16*> [#uses=2]
17*9880d681SAndroid Build Coastguard Worker	%d_addr = alloca i8		; <i8*> [#uses=2]
18*9880d681SAndroid Build Coastguard Worker	%"alloca point" = bitcast i32 0 to i32		; <i32> [#uses=0]
19*9880d681SAndroid Build Coastguard Worker	%tmp = bitcast %struct.BoundaryAlignment* %str_addr to { i64, i64 }*		; <{ i64, i64 }*> [#uses=1]
20*9880d681SAndroid Build Coastguard Worker	%tmp1 = getelementptr { i64, i64 }, { i64, i64 }* %tmp, i32 0, i32 0		; <i64*> [#uses=1]
21*9880d681SAndroid Build Coastguard Worker	store i64 %str.0, i64* %tmp1
22*9880d681SAndroid Build Coastguard Worker	%tmp2 = bitcast %struct.BoundaryAlignment* %str_addr to { i64, i64 }*		; <{ i64, i64 }*> [#uses=1]
23*9880d681SAndroid Build Coastguard Worker	%tmp3 = getelementptr { i64, i64 }, { i64, i64 }* %tmp2, i32 0, i32 1		; <i64*> [#uses=1]
24*9880d681SAndroid Build Coastguard Worker	%bc = bitcast i64* %tmp3 to i8*		; <i8*> [#uses=2]
25*9880d681SAndroid Build Coastguard Worker	%byte = trunc i64 %str.1 to i8		; <i8> [#uses=1]
26*9880d681SAndroid Build Coastguard Worker	store i8 %byte, i8* %bc
27*9880d681SAndroid Build Coastguard Worker	%shft = lshr i64 %str.1, 8		; <i64> [#uses=2]
28*9880d681SAndroid Build Coastguard Worker	%Loc = getelementptr i8, i8* %bc, i32 1		; <i8*> [#uses=2]
29*9880d681SAndroid Build Coastguard Worker	%byte4 = trunc i64 %shft to i8		; <i8> [#uses=1]
30*9880d681SAndroid Build Coastguard Worker	store i8 %byte4, i8* %Loc
31*9880d681SAndroid Build Coastguard Worker	%shft5 = lshr i64 %shft, 8		; <i64> [#uses=2]
32*9880d681SAndroid Build Coastguard Worker	%Loc6 = getelementptr i8, i8* %Loc, i32 1		; <i8*> [#uses=2]
33*9880d681SAndroid Build Coastguard Worker	%byte7 = trunc i64 %shft5 to i8		; <i8> [#uses=1]
34*9880d681SAndroid Build Coastguard Worker	store i8 %byte7, i8* %Loc6
35*9880d681SAndroid Build Coastguard Worker	%shft8 = lshr i64 %shft5, 8		; <i64> [#uses=2]
36*9880d681SAndroid Build Coastguard Worker	%Loc9 = getelementptr i8, i8* %Loc6, i32 1		; <i8*> [#uses=2]
37*9880d681SAndroid Build Coastguard Worker	%byte10 = trunc i64 %shft8 to i8		; <i8> [#uses=1]
38*9880d681SAndroid Build Coastguard Worker	store i8 %byte10, i8* %Loc9
39*9880d681SAndroid Build Coastguard Worker	%shft11 = lshr i64 %shft8, 8		; <i64> [#uses=0]
40*9880d681SAndroid Build Coastguard Worker	%Loc12 = getelementptr i8, i8* %Loc9, i32 1		; <i8*> [#uses=0]
41*9880d681SAndroid Build Coastguard Worker	store i16 %s, i16* %s_addr
42*9880d681SAndroid Build Coastguard Worker	store i32 %j, i32* %j_addr
43*9880d681SAndroid Build Coastguard Worker	store i8 %c, i8* %c_addr
44*9880d681SAndroid Build Coastguard Worker	store i16 %t, i16* %t_addr
45*9880d681SAndroid Build Coastguard Worker	store i16 %u, i16* %u_addr
46*9880d681SAndroid Build Coastguard Worker	store i8 %d, i8* %d_addr
47*9880d681SAndroid Build Coastguard Worker	%tmp13 = getelementptr %struct.BoundaryAlignment, %struct.BoundaryAlignment* %str_addr, i32 0, i32 0		; <[3 x i8]*> [#uses=1]
48*9880d681SAndroid Build Coastguard Worker	%tmp1314 = bitcast [3 x i8]* %tmp13 to i32*		; <i32*> [#uses=1]
49*9880d681SAndroid Build Coastguard Worker	%tmp15 = load i32, i32* %tmp1314, align 4		; <i32> [#uses=1]
50*9880d681SAndroid Build Coastguard Worker	%tmp16 = shl i32 %tmp15, 14		; <i32> [#uses=1]
51*9880d681SAndroid Build Coastguard Worker	%tmp17 = ashr i32 %tmp16, 23		; <i32> [#uses=1]
52*9880d681SAndroid Build Coastguard Worker	%tmp1718 = trunc i32 %tmp17 to i16		; <i16> [#uses=1]
53*9880d681SAndroid Build Coastguard Worker	%sextl = shl i16 %tmp1718, 7		; <i16> [#uses=1]
54*9880d681SAndroid Build Coastguard Worker	%sextr = ashr i16 %sextl, 7		; <i16> [#uses=2]
55*9880d681SAndroid Build Coastguard Worker	%sextl19 = shl i16 %sextr, 7		; <i16> [#uses=1]
56*9880d681SAndroid Build Coastguard Worker	%sextr20 = ashr i16 %sextl19, 7		; <i16> [#uses=0]
57*9880d681SAndroid Build Coastguard Worker	%sextl21 = shl i16 %sextr, 7		; <i16> [#uses=1]
58*9880d681SAndroid Build Coastguard Worker	%sextr22 = ashr i16 %sextl21, 7		; <i16> [#uses=1]
59*9880d681SAndroid Build Coastguard Worker	%sextr2223 = sext i16 %sextr22 to i32		; <i32> [#uses=1]
60*9880d681SAndroid Build Coastguard Worker	%tmp24 = load i32, i32* %j_addr, align 4		; <i32> [#uses=1]
61*9880d681SAndroid Build Coastguard Worker	%tmp25 = icmp ne i32 %sextr2223, %tmp24		; <i1> [#uses=1]
62*9880d681SAndroid Build Coastguard Worker	%tmp2526 = zext i1 %tmp25 to i8		; <i8> [#uses=1]
63*9880d681SAndroid Build Coastguard Worker	%toBool = icmp ne i8 %tmp2526, 0		; <i1> [#uses=1]
64*9880d681SAndroid Build Coastguard Worker	br i1 %toBool, label %bb, label %bb27
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerbb:		; preds = %entry
67*9880d681SAndroid Build Coastguard Worker	call void (...) @abort( ) noreturn nounwind
68*9880d681SAndroid Build Coastguard Worker	unreachable
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerbb27:		; preds = %entry
71*9880d681SAndroid Build Coastguard Worker	%tmp28 = getelementptr %struct.BoundaryAlignment, %struct.BoundaryAlignment* %str_addr, i32 0, i32 1		; <i8*> [#uses=1]
72*9880d681SAndroid Build Coastguard Worker	%tmp29 = load i8, i8* %tmp28, align 4		; <i8> [#uses=1]
73*9880d681SAndroid Build Coastguard Worker	%tmp30 = load i8, i8* %c_addr, align 1		; <i8> [#uses=1]
74*9880d681SAndroid Build Coastguard Worker	%tmp31 = icmp ne i8 %tmp29, %tmp30		; <i1> [#uses=1]
75*9880d681SAndroid Build Coastguard Worker	%tmp3132 = zext i1 %tmp31 to i8		; <i8> [#uses=1]
76*9880d681SAndroid Build Coastguard Worker	%toBool33 = icmp ne i8 %tmp3132, 0		; <i1> [#uses=1]
77*9880d681SAndroid Build Coastguard Worker	br i1 %toBool33, label %bb34, label %bb35
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Workerbb34:		; preds = %bb27
80*9880d681SAndroid Build Coastguard Worker	call void (...) @abort( ) noreturn nounwind
81*9880d681SAndroid Build Coastguard Worker	unreachable
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Workerbb35:		; preds = %bb27
84*9880d681SAndroid Build Coastguard Worker	%tmp36 = getelementptr %struct.BoundaryAlignment, %struct.BoundaryAlignment* %str_addr, i32 0, i32 2		; <i16*> [#uses=1]
85*9880d681SAndroid Build Coastguard Worker	%tmp37 = load i16, i16* %tmp36, align 4		; <i16> [#uses=1]
86*9880d681SAndroid Build Coastguard Worker	%tmp38 = shl i16 %tmp37, 7		; <i16> [#uses=1]
87*9880d681SAndroid Build Coastguard Worker	%tmp39 = ashr i16 %tmp38, 7		; <i16> [#uses=1]
88*9880d681SAndroid Build Coastguard Worker	%sextl40 = shl i16 %tmp39, 7		; <i16> [#uses=1]
89*9880d681SAndroid Build Coastguard Worker	%sextr41 = ashr i16 %sextl40, 7		; <i16> [#uses=2]
90*9880d681SAndroid Build Coastguard Worker	%sextl42 = shl i16 %sextr41, 7		; <i16> [#uses=1]
91*9880d681SAndroid Build Coastguard Worker	%sextr43 = ashr i16 %sextl42, 7		; <i16> [#uses=0]
92*9880d681SAndroid Build Coastguard Worker	%sextl44 = shl i16 %sextr41, 7		; <i16> [#uses=1]
93*9880d681SAndroid Build Coastguard Worker	%sextr45 = ashr i16 %sextl44, 7		; <i16> [#uses=1]
94*9880d681SAndroid Build Coastguard Worker	%tmp46 = load i16, i16* %t_addr, align 2		; <i16> [#uses=1]
95*9880d681SAndroid Build Coastguard Worker	%tmp47 = icmp ne i16 %sextr45, %tmp46		; <i1> [#uses=1]
96*9880d681SAndroid Build Coastguard Worker	%tmp4748 = zext i1 %tmp47 to i8		; <i8> [#uses=1]
97*9880d681SAndroid Build Coastguard Worker	%toBool49 = icmp ne i8 %tmp4748, 0		; <i1> [#uses=1]
98*9880d681SAndroid Build Coastguard Worker	br i1 %toBool49, label %bb50, label %bb51
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerbb50:		; preds = %bb35
101*9880d681SAndroid Build Coastguard Worker	call void (...) @abort( ) noreturn nounwind
102*9880d681SAndroid Build Coastguard Worker	unreachable
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Workerbb51:		; preds = %bb35
105*9880d681SAndroid Build Coastguard Worker	%tmp52 = getelementptr %struct.BoundaryAlignment, %struct.BoundaryAlignment* %str_addr, i32 0, i32 3		; <i16*> [#uses=1]
106*9880d681SAndroid Build Coastguard Worker	%tmp53 = load i16, i16* %tmp52, align 4		; <i16> [#uses=1]
107*9880d681SAndroid Build Coastguard Worker	%tmp54 = shl i16 %tmp53, 7		; <i16> [#uses=1]
108*9880d681SAndroid Build Coastguard Worker	%tmp55 = ashr i16 %tmp54, 7		; <i16> [#uses=1]
109*9880d681SAndroid Build Coastguard Worker	%sextl56 = shl i16 %tmp55, 7		; <i16> [#uses=1]
110*9880d681SAndroid Build Coastguard Worker	%sextr57 = ashr i16 %sextl56, 7		; <i16> [#uses=2]
111*9880d681SAndroid Build Coastguard Worker	%sextl58 = shl i16 %sextr57, 7		; <i16> [#uses=1]
112*9880d681SAndroid Build Coastguard Worker	%sextr59 = ashr i16 %sextl58, 7		; <i16> [#uses=0]
113*9880d681SAndroid Build Coastguard Worker	%sextl60 = shl i16 %sextr57, 7		; <i16> [#uses=1]
114*9880d681SAndroid Build Coastguard Worker	%sextr61 = ashr i16 %sextl60, 7		; <i16> [#uses=1]
115*9880d681SAndroid Build Coastguard Worker	%tmp62 = load i16, i16* %u_addr, align 2		; <i16> [#uses=1]
116*9880d681SAndroid Build Coastguard Worker	%tmp63 = icmp ne i16 %sextr61, %tmp62		; <i1> [#uses=1]
117*9880d681SAndroid Build Coastguard Worker	%tmp6364 = zext i1 %tmp63 to i8		; <i8> [#uses=1]
118*9880d681SAndroid Build Coastguard Worker	%toBool65 = icmp ne i8 %tmp6364, 0		; <i1> [#uses=1]
119*9880d681SAndroid Build Coastguard Worker	br i1 %toBool65, label %bb66, label %bb67
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Workerbb66:		; preds = %bb51
122*9880d681SAndroid Build Coastguard Worker	call void (...) @abort( ) noreturn nounwind
123*9880d681SAndroid Build Coastguard Worker	unreachable
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerbb67:		; preds = %bb51
126*9880d681SAndroid Build Coastguard Worker	%tmp68 = getelementptr %struct.BoundaryAlignment, %struct.BoundaryAlignment* %str_addr, i32 0, i32 4		; <i8*> [#uses=1]
127*9880d681SAndroid Build Coastguard Worker	%tmp69 = load i8, i8* %tmp68, align 4		; <i8> [#uses=1]
128*9880d681SAndroid Build Coastguard Worker	%tmp70 = load i8, i8* %d_addr, align 1		; <i8> [#uses=1]
129*9880d681SAndroid Build Coastguard Worker	%tmp71 = icmp ne i8 %tmp69, %tmp70		; <i1> [#uses=1]
130*9880d681SAndroid Build Coastguard Worker	%tmp7172 = zext i1 %tmp71 to i8		; <i8> [#uses=1]
131*9880d681SAndroid Build Coastguard Worker	%toBool73 = icmp ne i8 %tmp7172, 0		; <i1> [#uses=1]
132*9880d681SAndroid Build Coastguard Worker	br i1 %toBool73, label %bb74, label %bb75
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerbb74:		; preds = %bb67
135*9880d681SAndroid Build Coastguard Worker	call void (...) @abort( ) noreturn nounwind
136*9880d681SAndroid Build Coastguard Worker	unreachable
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerbb75:		; preds = %bb67
139*9880d681SAndroid Build Coastguard Worker	br label %return
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerreturn:		; preds = %bb75
142*9880d681SAndroid Build Coastguard Worker	ret void
143*9880d681SAndroid Build Coastguard Worker}
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Workerdeclare void @abort(...) noreturn nounwind
146