xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/coalescer-dce2.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -verify-coalescing
2*9880d681SAndroid Build Coastguard Worker; PR12911
3*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-n8:16:32:64"
4*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-macosx10.7.0"
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker@d = common global i32 0, align 4
7*9880d681SAndroid Build Coastguard Worker@c = common global i32 0, align 4
8*9880d681SAndroid Build Coastguard Worker@b = common global i32 0, align 4
9*9880d681SAndroid Build Coastguard Worker@h = common global i32 0, align 4
10*9880d681SAndroid Build Coastguard Worker@f = common global i32 0, align 4
11*9880d681SAndroid Build Coastguard Worker@g = common global i32 0, align 4
12*9880d681SAndroid Build Coastguard Worker@a = common global i16 0, align 2
13*9880d681SAndroid Build Coastguard Worker@e = common global i32 0, align 4
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerdefine void @fn1() nounwind uwtable ssp {
16*9880d681SAndroid Build Coastguard Workerentry:
17*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* @d, align 4
18*9880d681SAndroid Build Coastguard Worker  %tobool72 = icmp eq i32 %0, 0
19*9880d681SAndroid Build Coastguard Worker  br i1 %tobool72, label %for.end32, label %for.cond1.preheader.lr.ph
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader.lr.ph:                        ; preds = %entry
22*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* @c, align 4
23*9880d681SAndroid Build Coastguard Worker  %tobool2 = icmp eq i32 %1, 0
24*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* @b, align 4
25*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %2, 0
26*9880d681SAndroid Build Coastguard Worker  %conv = zext i1 %cmp to i32
27*9880d681SAndroid Build Coastguard Worker  %3 = load i32, i32* @g, align 4
28*9880d681SAndroid Build Coastguard Worker  %tobool4 = icmp eq i32 %3, 0
29*9880d681SAndroid Build Coastguard Worker  %4 = load i16, i16* @a, align 2
30*9880d681SAndroid Build Coastguard Worker  %tobool9 = icmp eq i16 %4, 0
31*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader:                              ; preds = %for.cond25.loopexit.us-lcssa.us-lcssa, %if.end.us50, %if.end.us, %if.end.us.us, %for.cond1.preheader.lr.ph
34*9880d681SAndroid Build Coastguard Worker  %j.073 = phi i32 [ undef, %for.cond1.preheader.lr.ph ], [ %j.1.us.us, %if.end.us.us ], [ %j.1.us, %if.end.us ], [ %j.073, %for.cond25.loopexit.us-lcssa.us-lcssa ], [ %j.1.us36, %if.end.us50 ]
35*9880d681SAndroid Build Coastguard Worker  br i1 %tobool2, label %for.cond1.preheader.split.us, label %for.cond1.preheader.for.cond1.preheader.split_crit_edge
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader.for.cond1.preheader.split_crit_edge: ; preds = %for.cond1.preheader
38*9880d681SAndroid Build Coastguard Worker  br i1 %tobool9, label %if.end.us50, label %for.cond1.preheader.split.for.cond1.preheader.split.split_crit_edge
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader.split.us:                     ; preds = %for.cond1.preheader
41*9880d681SAndroid Build Coastguard Worker  br i1 %tobool9, label %cond.end.us.us, label %cond.end.us
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workercond.false18.us.us:                               ; preds = %if.end.us.us
44*9880d681SAndroid Build Coastguard Worker  %5 = load i32, i32* @f, align 4
45*9880d681SAndroid Build Coastguard Worker  %sext76 = shl i32 %5, 16
46*9880d681SAndroid Build Coastguard Worker  %phitmp75 = ashr exact i32 %sext76, 16
47*9880d681SAndroid Build Coastguard Worker  br label %cond.end.us.us
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerif.end.us.us:                                     ; preds = %cond.end.us.us, %if.then.us.us
50*9880d681SAndroid Build Coastguard Worker  br i1 %tobool4, label %cond.false18.us.us, label %for.cond1.preheader
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerif.then.us.us:                                    ; preds = %cond.end.us.us
53*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* @f, align 4
54*9880d681SAndroid Build Coastguard Worker  br label %if.end.us.us
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Workercond.end.us.us:                                   ; preds = %cond.false18.us.us, %for.cond1.preheader.split.us
57*9880d681SAndroid Build Coastguard Worker  %j.1.us.us = phi i32 [ %j.073, %for.cond1.preheader.split.us ], [ %phitmp75, %cond.false18.us.us ]
58*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* @h, align 4
59*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then.us.us, label %if.end.us.us
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workercond.end21.us:                                    ; preds = %land.lhs.true12.us, %cond.false18.us
62*9880d681SAndroid Build Coastguard Worker  %cond22.us = phi i16 [ %add.us, %cond.false18.us ], [ %4, %land.lhs.true12.us ]
63*9880d681SAndroid Build Coastguard Worker  %conv24.us = sext i16 %cond22.us to i32
64*9880d681SAndroid Build Coastguard Worker  br label %cond.end.us
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workercond.false18.us:                                  ; preds = %if.end6.us, %land.lhs.true12.us
67*9880d681SAndroid Build Coastguard Worker  %add.us = add i16 %4, %conv7.us
68*9880d681SAndroid Build Coastguard Worker  br label %cond.end21.us
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerland.lhs.true12.us:                               ; preds = %if.end6.us
71*9880d681SAndroid Build Coastguard Worker  %conv10.us = sext i16 %conv7.us to i32
72*9880d681SAndroid Build Coastguard Worker  %sub.us = sub nsw i32 0, %conv10.us
73*9880d681SAndroid Build Coastguard Worker  %cmp14.us = icmp slt i32 %sub.us, 1
74*9880d681SAndroid Build Coastguard Worker  br i1 %cmp14.us, label %cond.end21.us, label %cond.false18.us
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Workerif.end6.us:                                       ; preds = %if.end.us
77*9880d681SAndroid Build Coastguard Worker  %6 = load i32, i32* @f, align 4
78*9880d681SAndroid Build Coastguard Worker  %conv7.us = trunc i32 %6 to i16
79*9880d681SAndroid Build Coastguard Worker  %tobool11.us = icmp eq i16 %conv7.us, 0
80*9880d681SAndroid Build Coastguard Worker  br i1 %tobool11.us, label %cond.false18.us, label %land.lhs.true12.us
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Workerif.end.us:                                        ; preds = %cond.end.us, %if.then.us
83*9880d681SAndroid Build Coastguard Worker  br i1 %tobool4, label %if.end6.us, label %for.cond1.preheader
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Workerif.then.us:                                       ; preds = %cond.end.us
86*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* @f, align 4
87*9880d681SAndroid Build Coastguard Worker  br label %if.end.us
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Workercond.end.us:                                      ; preds = %cond.end21.us, %for.cond1.preheader.split.us
90*9880d681SAndroid Build Coastguard Worker  %j.1.us = phi i32 [ %conv24.us, %cond.end21.us ], [ %j.073, %for.cond1.preheader.split.us ]
91*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* @h, align 4
92*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then.us, label %if.end.us
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader.split.for.cond1.preheader.split.split_crit_edge: ; preds = %for.cond1.preheader.for.cond1.preheader.split_crit_edge
95*9880d681SAndroid Build Coastguard Worker  br i1 %tobool4, label %if.end6.us65, label %for.cond25.loopexit.us-lcssa.us-lcssa
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Workercond.false18.us40:                                ; preds = %if.end.us50
98*9880d681SAndroid Build Coastguard Worker  %7 = load i32, i32* @f, align 4
99*9880d681SAndroid Build Coastguard Worker  %sext = shl i32 %7, 16
100*9880d681SAndroid Build Coastguard Worker  %phitmp = ashr exact i32 %sext, 16
101*9880d681SAndroid Build Coastguard Worker  br label %if.end.us50
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Workerif.end.us50:                                      ; preds = %cond.false18.us40, %for.cond1.preheader.for.cond1.preheader.split_crit_edge
104*9880d681SAndroid Build Coastguard Worker  %j.1.us36 = phi i32 [ %j.073, %for.cond1.preheader.for.cond1.preheader.split_crit_edge ], [ %phitmp, %cond.false18.us40 ]
105*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* @h, align 4
106*9880d681SAndroid Build Coastguard Worker  br i1 %tobool4, label %cond.false18.us40, label %for.cond1.preheader
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workerif.end6.us65:                                     ; preds = %if.end6.us65, %for.cond1.preheader.split.for.cond1.preheader.split.split_crit_edge
109*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* @h, align 4
110*9880d681SAndroid Build Coastguard Worker  br label %if.end6.us65
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Workerfor.cond25.loopexit.us-lcssa.us-lcssa:            ; preds = %for.cond1.preheader.split.for.cond1.preheader.split.split_crit_edge
113*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* @h, align 4
114*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Workerfor.end32:                                        ; preds = %entry
117*9880d681SAndroid Build Coastguard Worker  ret void
118*9880d681SAndroid Build Coastguard Worker}
119