xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/sink-cheap-instructions.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-linux -sink-insts-to-avoid-spills | FileCheck %s -check-prefix=SINK
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; Ensure that we sink copy-like instructions into loops to avoid register
5*9880d681SAndroid Build Coastguard Worker; spills.
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; CHECK: Spill
8*9880d681SAndroid Build Coastguard Worker; SINK-NOT: Spill
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker%struct.A = type { i32, i32, i32, i32, i32, i32 }
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine void @_Z1fPhP1A(i8* nocapture readonly %input, %struct.A* %a) {
13*9880d681SAndroid Build Coastguard Worker  %1 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 0
14*9880d681SAndroid Build Coastguard Worker  %2 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 1
15*9880d681SAndroid Build Coastguard Worker  %3 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 2
16*9880d681SAndroid Build Coastguard Worker  %4 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 3
17*9880d681SAndroid Build Coastguard Worker  %5 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 4
18*9880d681SAndroid Build Coastguard Worker  %6 = getelementptr inbounds %struct.A, %struct.A* %a, i64 0, i32 5
19*9880d681SAndroid Build Coastguard Worker  br label %.backedge
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker.backedge:
22*9880d681SAndroid Build Coastguard Worker  %.0 = phi i8* [ %input, %0 ], [ %7, %.backedge.backedge ]
23*9880d681SAndroid Build Coastguard Worker  %7 = getelementptr inbounds i8, i8* %.0, i64 1
24*9880d681SAndroid Build Coastguard Worker  %8 = load i8, i8* %7, align 1
25*9880d681SAndroid Build Coastguard Worker  switch i8 %8, label %.backedge.backedge [
26*9880d681SAndroid Build Coastguard Worker    i8 0, label %9
27*9880d681SAndroid Build Coastguard Worker    i8 10, label %10
28*9880d681SAndroid Build Coastguard Worker    i8 20, label %11
29*9880d681SAndroid Build Coastguard Worker    i8 30, label %12
30*9880d681SAndroid Build Coastguard Worker    i8 40, label %13
31*9880d681SAndroid Build Coastguard Worker    i8 50, label %14
32*9880d681SAndroid Build Coastguard Worker  ]
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker; <label>:9
35*9880d681SAndroid Build Coastguard Worker  tail call void @_Z6assignPj(i32* %1)
36*9880d681SAndroid Build Coastguard Worker  br label %.backedge.backedge
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker; <label>:10
39*9880d681SAndroid Build Coastguard Worker  tail call void @_Z6assignPj(i32* %2)
40*9880d681SAndroid Build Coastguard Worker  br label %.backedge.backedge
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker.backedge.backedge:
43*9880d681SAndroid Build Coastguard Worker  br label %.backedge
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker; <label>:11
46*9880d681SAndroid Build Coastguard Worker  tail call void @_Z6assignPj(i32* %3)
47*9880d681SAndroid Build Coastguard Worker  br label %.backedge.backedge
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; <label>:12
50*9880d681SAndroid Build Coastguard Worker  tail call void @_Z6assignPj(i32* %4)
51*9880d681SAndroid Build Coastguard Worker  br label %.backedge.backedge
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; <label>:13
54*9880d681SAndroid Build Coastguard Worker  tail call void @_Z6assignPj(i32* %5)
55*9880d681SAndroid Build Coastguard Worker  br label %.backedge.backedge
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; <label>:14
58*9880d681SAndroid Build Coastguard Worker  tail call void @_Z6assignPj(i32* %6)
59*9880d681SAndroid Build Coastguard Worker  br label %.backedge.backedge
60*9880d681SAndroid Build Coastguard Worker}
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerdeclare void @_Z6assignPj(i32*)
63