xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/coalescer-dce.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -verify-machineinstrs -disable-fp-elim -disable-machine-dce -verify-coalescing
2*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"
3*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-macosx10.7.0"
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; This test case has a sub-register join followed by a remat:
6*9880d681SAndroid Build Coastguard Worker;
7*9880d681SAndroid Build Coastguard Worker; 256L    %vreg2<def> = COPY %vreg7:sub_32bit<kill>; GR32:%vreg2 GR64:%vreg7
8*9880d681SAndroid Build Coastguard Worker;         Considering merging %vreg2 with %vreg7:sub_32bit
9*9880d681SAndroid Build Coastguard Worker;         Cross-class to GR64.
10*9880d681SAndroid Build Coastguard Worker;                 RHS = %vreg2 = [256d,272d:0)  0@256d
11*9880d681SAndroid Build Coastguard Worker;                 LHS = %vreg7 = [208d,256d:0)[304L,480L:0)  0@208d
12*9880d681SAndroid Build Coastguard Worker;                 updated: 272L   %vreg0<def> = COPY %vreg7:sub_32bit<kill>; GR32:%vreg0 GR64:%vreg7
13*9880d681SAndroid Build Coastguard Worker;         Joined. Result = %vreg7 = [208d,272d:0)[304L,480L:0)  0@208d
14*9880d681SAndroid Build Coastguard Worker;
15*9880d681SAndroid Build Coastguard Worker; 272L    %vreg10:sub_32bit<def> = COPY %vreg7:sub_32bit<kill>, %vreg10<imp-def>; GR64:%vreg10,%vreg7
16*9880d681SAndroid Build Coastguard Worker;         Considering merging %vreg7 with %vreg10
17*9880d681SAndroid Build Coastguard Worker;                 RHS = %vreg7 = [208d,272d:0)[304L,480L:0)  0@208d
18*9880d681SAndroid Build Coastguard Worker;                 LHS = %vreg10 = [16d,64L:2)[64L,160L:1)[192L,240L:1)[272d,304L:3)[304L,352d:1)[352d,400d:0)[400d,400S:4)  0@352d 1@64L-phidef 2@16d-phikill 3@272d-phikill 4@400d
19*9880d681SAndroid Build Coastguard Worker; Remat: %vreg10<def> = MOV64r0 %vreg10<imp-def>, %EFLAGS<imp-def,dead>, %vreg10<imp-def>; GR64:%vreg10
20*9880d681SAndroid Build Coastguard Worker; Shrink: %vreg7 = [208d,272d:0)[304L,480L:0)  0@208d
21*9880d681SAndroid Build Coastguard Worker;  live-in at 240L
22*9880d681SAndroid Build Coastguard Worker;  live-in at 416L
23*9880d681SAndroid Build Coastguard Worker;  live-in at 320L
24*9880d681SAndroid Build Coastguard Worker;  live-in at 304L
25*9880d681SAndroid Build Coastguard Worker; Shrunk: %vreg7 = [208d,256d:0)[304L,480L:0)  0@208d
26*9880d681SAndroid Build Coastguard Worker;
27*9880d681SAndroid Build Coastguard Worker; The COPY at 256L is rewritten as a partial def, and that would artificially
28*9880d681SAndroid Build Coastguard Worker; extend the live range of %vreg7 to end at 256d.  When the joined copy is
29*9880d681SAndroid Build Coastguard Worker; removed, -verify-coalescing complains about the dangling kill.
30*9880d681SAndroid Build Coastguard Worker;
31*9880d681SAndroid Build Coastguard Worker; <rdar://problem/9967101>
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerdefine void @f1() nounwind uwtable ssp {
34*9880d681SAndroid Build Coastguard Workerbb:
35*9880d681SAndroid Build Coastguard Worker  br label %bb1
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerbb1:
38*9880d681SAndroid Build Coastguard Worker  %tmp = phi i32 [ 0, %bb ], [ %tmp21, %bb20 ]
39*9880d681SAndroid Build Coastguard Worker  br label %bb2
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerbb2:
42*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb5, label %bb8
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerbb4:
45*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb2, label %bb20
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerbb5:
48*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb4, label %bb20
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Workerbb8:
51*9880d681SAndroid Build Coastguard Worker  %tmp9 = phi i32 [ %tmp24, %bb23 ], [ 0, %bb2 ]
52*9880d681SAndroid Build Coastguard Worker  br i1 false, label %bb41, label %bb10
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerbb10:
55*9880d681SAndroid Build Coastguard Worker  %tmp11 = sub nsw i32 %tmp9, %tmp
56*9880d681SAndroid Build Coastguard Worker  br i1 false, label %bb2, label %bb26
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerbb20:
59*9880d681SAndroid Build Coastguard Worker  %tmp21 = phi i32 [ undef, %bb4 ], [ undef, %bb5 ], [ %tmp9, %bb27 ], [ undef, %bb32 ]
60*9880d681SAndroid Build Coastguard Worker  %tmp22 = phi i32 [ undef, %bb4 ], [ undef, %bb5 ], [ %tmp11, %bb27 ], [ undef, %bb32 ]
61*9880d681SAndroid Build Coastguard Worker  br label %bb1
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerbb23:
64*9880d681SAndroid Build Coastguard Worker  %tmp24 = add nsw i32 %tmp9, 1
65*9880d681SAndroid Build Coastguard Worker  br label %bb8
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerbb26:
68*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb27, label %bb32
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerbb27:
71*9880d681SAndroid Build Coastguard Worker  %tmp28 = zext i32 %tmp11 to i64
72*9880d681SAndroid Build Coastguard Worker  %tmp30 = icmp eq i64 undef, %tmp28
73*9880d681SAndroid Build Coastguard Worker  br i1 %tmp30, label %bb20, label %bb27
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerbb32:
76*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %bb20, label %bb23
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Workerbb41:
79*9880d681SAndroid Build Coastguard Worker  ret void
80*9880d681SAndroid Build Coastguard Worker}
81