Skip to content

Commit 76e3759

Browse files
authored
[Hexagon] Order objects on the stack by their alignments (llvm#81280)
This patch sorts stack objects by their alignment value from the largest to the smallest. If two objects have the same alignment, then they are sorted by their size from the largest to the smallest. This minimizes padding and reduces run time stack size.
1 parent 3a05e76 commit 76e3759

File tree

7 files changed

+158
-48
lines changed

7 files changed

+158
-48
lines changed

llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2688,3 +2688,67 @@ bool HexagonFrameLowering::mayOverflowFrameOffset(MachineFunction &MF) const {
26882688

26892689
return false;
26902690
}
2691+
2692+
namespace {
2693+
// Struct used by orderFrameObjects to help sort the stack objects.
2694+
struct HexagonFrameSortingObject {
2695+
bool IsValid = false;
2696+
unsigned Index = 0; // Index of Object into MFI list.
2697+
unsigned Size = 0;
2698+
Align ObjectAlignment = Align(1); // Alignment of Object in bytes.
2699+
};
2700+
2701+
struct HexagonFrameSortingComparator {
2702+
inline bool operator()(const HexagonFrameSortingObject &A,
2703+
const HexagonFrameSortingObject &B) const {
2704+
return std::make_tuple(!A.IsValid, A.ObjectAlignment, A.Size) <
2705+
std::make_tuple(!B.IsValid, B.ObjectAlignment, B.Size);
2706+
}
2707+
};
2708+
} // namespace
2709+
2710+
// Sort objects on the stack by alignment value and then by size to minimize
2711+
// padding.
2712+
void HexagonFrameLowering::orderFrameObjects(
2713+
const MachineFunction &MF, SmallVectorImpl<int> &ObjectsToAllocate) const {
2714+
2715+
if (ObjectsToAllocate.empty())
2716+
return;
2717+
2718+
const MachineFrameInfo &MFI = MF.getFrameInfo();
2719+
int NObjects = ObjectsToAllocate.size();
2720+
2721+
// Create an array of all MFI objects.
2722+
SmallVector<HexagonFrameSortingObject> SortingObjects(
2723+
MFI.getObjectIndexEnd());
2724+
2725+
for (int i = 0, j = 0, e = MFI.getObjectIndexEnd(); i < e && j != NObjects;
2726+
++i) {
2727+
if (i != ObjectsToAllocate[j])
2728+
continue;
2729+
j++;
2730+
2731+
// A variable size object has size equal to 0. Since Hexagon sets
2732+
// getUseLocalStackAllocationBlock() to true, a local block is allocated
2733+
// earlier. This case is not handled here for now.
2734+
int Size = MFI.getObjectSize(i);
2735+
if (Size == 0)
2736+
return;
2737+
2738+
SortingObjects[i].IsValid = true;
2739+
SortingObjects[i].Index = i;
2740+
SortingObjects[i].Size = Size;
2741+
SortingObjects[i].ObjectAlignment = MFI.getObjectAlign(i);
2742+
}
2743+
2744+
// Sort objects by alignment and then by size.
2745+
llvm::stable_sort(SortingObjects, HexagonFrameSortingComparator());
2746+
2747+
// Modify the original list to represent the final order.
2748+
int i = NObjects;
2749+
for (auto &Obj : SortingObjects) {
2750+
if (i == 0)
2751+
break;
2752+
ObjectsToAllocate[--i] = Obj.Index;
2753+
}
2754+
}

llvm/lib/Target/Hexagon/HexagonFrameLowering.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ class HexagonFrameLowering : public TargetFrameLowering {
3535
explicit HexagonFrameLowering()
3636
: TargetFrameLowering(StackGrowsDown, Align(8), 0, Align(1), true) {}
3737

38+
void
39+
orderFrameObjects(const MachineFunction &MF,
40+
SmallVectorImpl<int> &ObjectsToAllocate) const override;
41+
3842
// All of the prolog/epilog functionality, including saving and restoring
3943
// callee-saved registers is handled in emitPrologue. This is to have the
4044
// logic for shrink-wrapping in one place.

llvm/test/CodeGen/Hexagon/hvx-reuse-fi-base.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ define dso_local void @f2() #0 {
4242
; CHECK-NEXT: } // 8-byte Folded Spill
4343
; CHECK-NEXT: {
4444
; CHECK-NEXT: v0 = vsplat(r16)
45-
; CHECK-NEXT: vmem(r29+#6) = v0.new
45+
; CHECK-NEXT: vmem(r29+#2) = v0.new
4646
; CHECK-NEXT: } // 128-byte Folded Spill
4747
; CHECK-NEXT: {
4848
; CHECK-NEXT: q0 = vand(v0,r0)
@@ -56,7 +56,7 @@ define dso_local void @f2() #0 {
5656
; CHECK-NEXT: {
5757
; CHECK-NEXT: v0 = vand(q0,r17)
5858
; CHECK-NEXT: r19 = ##g0+128
59-
; CHECK-NEXT: vmem(r29+#7) = v0.new
59+
; CHECK-NEXT: vmem(r29+#1) = v0.new
6060
; CHECK-NEXT: }
6161
; CHECK-NEXT: {
6262
; CHECK-NEXT: r20 = ##g0
@@ -78,15 +78,15 @@ define dso_local void @f2() #0 {
7878
; CHECK-NEXT: vmem(r20+#0) = v30
7979
; CHECK-NEXT: }
8080
; CHECK-NEXT: {
81-
; CHECK-NEXT: v0 = vmem(r29+#6)
81+
; CHECK-NEXT: v0 = vmem(r29+#2)
8282
; CHECK-NEXT: } // 128-byte Folded Reload
8383
; CHECK-NEXT: {
8484
; CHECK-NEXT: v1:0.h = vadd(v0.ub,v0.ub)
8585
; CHECK-NEXT: r0 = ##g2
86-
; CHECK-NEXT: vmem(r29+#1) = v0.new
86+
; CHECK-NEXT: vmem(r29+#6) = v0.new
8787
; CHECK-NEXT: } // 256-byte Folded Spill
8888
; CHECK-NEXT: {
89-
; CHECK-NEXT: vmem(r29+#2) = v1
89+
; CHECK-NEXT: vmem(r29+#7) = v1
9090
; CHECK-NEXT: } // 256-byte Folded Spill
9191
; CHECK-NEXT: {
9292
; CHECK-NEXT: v1:0.uw = vrmpy(v1:0.ub,r17.ub,#0)
@@ -98,10 +98,10 @@ define dso_local void @f2() #0 {
9898
; CHECK-NEXT: }
9999
; CHECK-NEXT: {
100100
; CHECK-NEXT: r0 = ##2147483647
101-
; CHECK-NEXT: v0 = vmem(r29+#1)
101+
; CHECK-NEXT: v0 = vmem(r29+#6)
102102
; CHECK-NEXT: } // 256-byte Folded Reload
103103
; CHECK-NEXT: {
104-
; CHECK-NEXT: v1 = vmem(r29+#2)
104+
; CHECK-NEXT: v1 = vmem(r29+#7)
105105
; CHECK-NEXT: } // 256-byte Folded Reload
106106
; CHECK-NEXT: {
107107
; CHECK-NEXT: v1:0.uw = vrmpy(v1:0.ub,r0.ub,#1)
@@ -142,7 +142,7 @@ define dso_local void @f2() #0 {
142142
; CHECK-NEXT: vmem(r20+#0) = v0
143143
; CHECK-NEXT: }
144144
; CHECK-NEXT: {
145-
; CHECK-NEXT: v0 = vmem(r29+#6)
145+
; CHECK-NEXT: v0 = vmem(r29+#2)
146146
; CHECK-NEXT: } // 128-byte Folded Reload
147147
; CHECK-NEXT: {
148148
; CHECK-NEXT: v1 = vmem(r29+#3)
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
; RUN: llc -march=hexagon -mattr=+hvxv68,+hvx-length128b < %s | FileCheck %s
2+
3+
; Check that ordering objects on the stack from the largest to the smallest has
4+
; decreased the space allocated on the stack by 512 Bytes.
5+
6+
; CHECK: allocframe(r29,#2432):raw
7+
8+
define void @test(ptr nocapture readonly %arg, ptr nocapture writeonly %arg1, i32 %arg2) local_unnamed_addr {
9+
bb:
10+
%shl = shl i32 %arg2, 5
11+
br label %bb3
12+
13+
bb3:
14+
%phi = phi i32 [ 0, %bb ], [ %add13, %bb3 ]
15+
%add = add i32 %phi, %shl
16+
%sext = sext i32 %add to i64
17+
%getelementptr = getelementptr float, ptr %arg, i64 %sext
18+
%load = load <32 x float>, ptr %getelementptr, align 4
19+
%fmul = fmul <32 x float> %load, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
20+
%fmul4 = fmul <32 x float> %load, <float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000, float 0x3FE9884620000000>
21+
%fmul5 = fmul <32 x float> %load, <float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000, float 0x3FA2444180000000>
22+
%fmul6 = fmul <32 x float> %load, %fmul5
23+
%fmul7 = fmul <32 x float> %load, %fmul6
24+
%fadd = fadd <32 x float> %fmul4, %fmul7
25+
%fmul8 = fmul <32 x float> %fadd, <float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00, float -2.000000e+00>
26+
%call = tail call <32 x float> @llvm.exp.v32f32(<32 x float> %fmul8)
27+
%fsub = fsub <32 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %call
28+
%fadd9 = fadd <32 x float> %call, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
29+
%fdiv = fdiv <32 x float> %fsub, %fadd9
30+
%fadd10 = fadd <32 x float> %fdiv, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
31+
%fmul11 = fmul <32 x float> %fmul, %fadd10
32+
%getelementptr12 = getelementptr float, ptr %arg1, i64 %sext
33+
store <32 x float> %fmul11, ptr %getelementptr12, align 128
34+
%add13 = add nuw nsw i32 %phi, 128
35+
%icmp = icmp ult i32 %phi, 8064
36+
br i1 %icmp, label %bb3, label %bb14
37+
38+
bb14:
39+
ret void
40+
}
41+
42+
declare <32 x float> @llvm.exp.v32f32(<32 x float>)

llvm/test/CodeGen/Hexagon/store-imm-stack-object.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
target triple = "hexagon"
44

55
; CHECK-LABEL: test1:
6-
; CHECK-DAG: memw(r29+#4) = ##875770417
6+
; CHECK-DAG: memw(r29+#12) = ##875770417
77
; CHECK-DAG: memw(r29+#8) = #51
8-
; CHECK-DAG: memh(r29+#12) = #50
9-
; CHECK-DAG: memb(r29+#15) = #49
8+
; CHECK-DAG: memh(r29+#6) = #50
9+
; CHECK-DAG: memb(r29+#5) = #49
1010
define void @test1() {
1111
b0:
1212
%v1 = alloca [1 x i8], align 1
@@ -30,9 +30,9 @@ b0:
3030
}
3131

3232
; CHECK-LABEL: test2:
33-
; CHECK-DAG: memw(r29+#208) = #51
34-
; CHECK-DAG: memh(r29+#212) = r{{[0-9]+}}
35-
; CHECK-DAG: memb(r29+#215) = r{{[0-9]+}}
33+
; CHECK-DAG: memw(r29+#8) = #51
34+
; CHECK-DAG: memh(r29+#6) = r{{[0-9]+}}
35+
; CHECK-DAG: memb(r29+#5) = r{{[0-9]+}}
3636
define void @test2() {
3737
b0:
3838
%v1 = alloca [1 x i8], align 1

llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/hexagon_generated_funcs.ll.generated.expected

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -75,31 +75,31 @@ attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" }
7575
; CHECK-NEXT: .cfi_offset r31, -4
7676
; CHECK-NEXT: .cfi_offset r30, -8
7777
; CHECK-NEXT: {
78-
; CHECK-NEXT: memw(r29+#20) = #0
78+
; CHECK-NEXT: memw(r29+#4) = #0
7979
; CHECK-NEXT: }
8080
; CHECK-NEXT: {
81-
; CHECK-NEXT: memw(r29+#16) = #0
82-
; CHECK-NEXT: memw(r29+#16) = #1
81+
; CHECK-NEXT: memw(r29+#8) = #0
82+
; CHECK-NEXT: memw(r29+#8) = #1
8383
; CHECK-NEXT: }
8484
; CHECK-NEXT: {
85-
; CHECK-NEXT: r1 = memw(r29+#16)
85+
; CHECK-NEXT: r1 = memw(r29+#8)
8686
; CHECK-NEXT: memw(r29+#12) = #2
8787
; CHECK-NEXT: }
8888
; CHECK-NEXT: {
89-
; CHECK-NEXT: memw(r29+#8) = #3
90-
; CHECK-NEXT: memw(r29+#4) = #4
89+
; CHECK-NEXT: memw(r29+#16) = #3
90+
; CHECK-NEXT: memw(r29+#20) = #4
9191
; CHECK-NEXT: }
9292
; CHECK-NEXT: {
9393
; CHECK-NEXT: p0 = cmp.eq(r1,#0)
94-
; CHECK-NEXT: if (p0.new) memw(r29+#8) = #3
94+
; CHECK-NEXT: if (p0.new) memw(r29+#16) = #3
9595
; CHECK-NEXT: if (p0.new) memw(r29+#12) = #2
9696
; CHECK-NEXT: }
9797
; CHECK-NEXT: {
98-
; CHECK-NEXT: if (p0) memw(r29+#4) = #4
99-
; CHECK-NEXT: if (p0) memw(r29+#16) = #1
98+
; CHECK-NEXT: if (p0) memw(r29+#20) = #4
99+
; CHECK-NEXT: if (p0) memw(r29+#8) = #1
100100
; CHECK-NEXT: }
101101
; CHECK-NEXT: {
102-
; CHECK-NEXT: if (!p0) memw(r29+#8) = #1
102+
; CHECK-NEXT: if (!p0) memw(r29+#16) = #1
103103
; CHECK-NEXT: }
104104
; CHECK-NEXT: {
105105
; CHECK-NEXT: r31:30 = dealloc_return(r30):raw
@@ -116,27 +116,27 @@ attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" }
116116
; CHECK-NEXT: .cfi_offset r31, -4
117117
; CHECK-NEXT: .cfi_offset r30, -8
118118
; CHECK-NEXT: {
119-
; CHECK-NEXT: memw(r29+#20) = #0
119+
; CHECK-NEXT: memw(r29+#4) = #0
120120
; CHECK-NEXT: memw(r0+#0) = #1
121121
; CHECK-NEXT: }
122122
; CHECK-NEXT: {
123-
; CHECK-NEXT: memw(r29+#16) = #1
123+
; CHECK-NEXT: memw(r29+#8) = #1
124124
; CHECK-NEXT: memw(r29+#12) = #2
125125
; CHECK-NEXT: }
126126
; CHECK-NEXT: {
127-
; CHECK-NEXT: memw(r29+#8) = #3
128-
; CHECK-NEXT: memw(r29+#4) = #4
127+
; CHECK-NEXT: memw(r29+#16) = #3
128+
; CHECK-NEXT: memw(r29+#20) = #4
129129
; CHECK-NEXT: }
130130
; CHECK-NEXT: //# InlineAsm Start
131131
; CHECK-NEXT: //# InlineAsm End
132132
; CHECK-NEXT: {
133133
; CHECK-NEXT: r0 = #0
134-
; CHECK-NEXT: memw(r29+#16) = #1
134+
; CHECK-NEXT: memw(r29+#8) = #1
135135
; CHECK-NEXT: memw(r29+#12) = #2
136136
; CHECK-NEXT: }
137137
; CHECK-NEXT: {
138-
; CHECK-NEXT: memw(r29+#8) = #3
139-
; CHECK-NEXT: memw(r29+#4) = #4
138+
; CHECK-NEXT: memw(r29+#16) = #3
139+
; CHECK-NEXT: memw(r29+#20) = #4
140140
; CHECK-NEXT: }
141141
; CHECK-NEXT: {
142142
; CHECK-NEXT: r31:30 = dealloc_return(r30):raw

llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/hexagon_generated_funcs.ll.nogenerated.expected

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,31 @@ define dso_local i32 @check_boundaries() #0 {
1616
; CHECK-NEXT: .cfi_offset r31, -4
1717
; CHECK-NEXT: .cfi_offset r30, -8
1818
; CHECK-NEXT: {
19-
; CHECK-NEXT: memw(r29+#20) = #0
19+
; CHECK-NEXT: memw(r29+#4) = #0
2020
; CHECK-NEXT: }
2121
; CHECK-NEXT: {
22-
; CHECK-NEXT: memw(r29+#16) = #0
23-
; CHECK-NEXT: memw(r29+#16) = #1
22+
; CHECK-NEXT: memw(r29+#8) = #0
23+
; CHECK-NEXT: memw(r29+#8) = #1
2424
; CHECK-NEXT: }
2525
; CHECK-NEXT: {
26-
; CHECK-NEXT: r1 = memw(r29+#16)
26+
; CHECK-NEXT: r1 = memw(r29+#8)
2727
; CHECK-NEXT: memw(r29+#12) = #2
2828
; CHECK-NEXT: }
2929
; CHECK-NEXT: {
30-
; CHECK-NEXT: memw(r29+#8) = #3
31-
; CHECK-NEXT: memw(r29+#4) = #4
30+
; CHECK-NEXT: memw(r29+#16) = #3
31+
; CHECK-NEXT: memw(r29+#20) = #4
3232
; CHECK-NEXT: }
3333
; CHECK-NEXT: {
3434
; CHECK-NEXT: p0 = cmp.eq(r1,#0)
35-
; CHECK-NEXT: if (p0.new) memw(r29+#8) = #3
35+
; CHECK-NEXT: if (p0.new) memw(r29+#16) = #3
3636
; CHECK-NEXT: if (p0.new) memw(r29+#12) = #2
3737
; CHECK-NEXT: }
3838
; CHECK-NEXT: {
39-
; CHECK-NEXT: if (p0) memw(r29+#4) = #4
40-
; CHECK-NEXT: if (p0) memw(r29+#16) = #1
39+
; CHECK-NEXT: if (p0) memw(r29+#20) = #4
40+
; CHECK-NEXT: if (p0) memw(r29+#8) = #1
4141
; CHECK-NEXT: }
4242
; CHECK-NEXT: {
43-
; CHECK-NEXT: if (!p0) memw(r29+#8) = #1
43+
; CHECK-NEXT: if (!p0) memw(r29+#16) = #1
4444
; CHECK-NEXT: }
4545
; CHECK-NEXT: {
4646
; CHECK-NEXT: r31:30 = dealloc_return(r30):raw
@@ -93,27 +93,27 @@ define dso_local i32 @main() #0 {
9393
; CHECK-NEXT: .cfi_offset r31, -4
9494
; CHECK-NEXT: .cfi_offset r30, -8
9595
; CHECK-NEXT: {
96-
; CHECK-NEXT: memw(r29+#20) = #0
96+
; CHECK-NEXT: memw(r29+#4) = #0
9797
; CHECK-NEXT: memw(r0+#0) = #1
9898
; CHECK-NEXT: }
9999
; CHECK-NEXT: {
100-
; CHECK-NEXT: memw(r29+#16) = #1
100+
; CHECK-NEXT: memw(r29+#8) = #1
101101
; CHECK-NEXT: memw(r29+#12) = #2
102102
; CHECK-NEXT: }
103103
; CHECK-NEXT: {
104-
; CHECK-NEXT: memw(r29+#8) = #3
105-
; CHECK-NEXT: memw(r29+#4) = #4
104+
; CHECK-NEXT: memw(r29+#16) = #3
105+
; CHECK-NEXT: memw(r29+#20) = #4
106106
; CHECK-NEXT: }
107107
; CHECK-NEXT: //# InlineAsm Start
108108
; CHECK-NEXT: //# InlineAsm End
109109
; CHECK-NEXT: {
110110
; CHECK-NEXT: r0 = #0
111-
; CHECK-NEXT: memw(r29+#16) = #1
111+
; CHECK-NEXT: memw(r29+#8) = #1
112112
; CHECK-NEXT: memw(r29+#12) = #2
113113
; CHECK-NEXT: }
114114
; CHECK-NEXT: {
115-
; CHECK-NEXT: memw(r29+#8) = #3
116-
; CHECK-NEXT: memw(r29+#4) = #4
115+
; CHECK-NEXT: memw(r29+#16) = #3
116+
; CHECK-NEXT: memw(r29+#20) = #4
117117
; CHECK-NEXT: }
118118
; CHECK-NEXT: {
119119
; CHECK-NEXT: r31:30 = dealloc_return(r30):raw

0 commit comments

Comments
 (0)