Skip to content

Commit 3abb8d0

Browse files
committed
[Hexagon] Order objects on the stack by their alignments followed by their size
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 db88f30 commit 3abb8d0

File tree

7 files changed

+157
-48
lines changed

7 files changed

+157
-48
lines changed

llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2688,3 +2688,64 @@ 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+
const MachineFrameInfo &MFI = MF.getFrameInfo();
2715+
int NObjects = ObjectsToAllocate.size();
2716+
2717+
if (ObjectsToAllocate.empty())
2718+
return;
2719+
2720+
// Create an array of all MFI objects.
2721+
std::vector<HexagonFrameSortingObject> SortingObjects(MFI.getObjectIndexEnd());
2722+
2723+
for (int i = 0, j = 0, e = MFI.getObjectIndexEnd(); i != e && j != NObjects; ++i) {
2724+
if (i != ObjectsToAllocate[j])
2725+
continue;
2726+
j++;
2727+
2728+
// A variable size object has size equal to 0. Since Hexagon sets
2729+
// getUseLocalStackAllocationBlock() to true, a local block is allocated
2730+
// earlier. This case is not handled here for now.
2731+
int Size = MFI.getObjectSize(i);
2732+
if (Size == 0)
2733+
return;
2734+
2735+
SortingObjects[i].IsValid = true;
2736+
SortingObjects[i].Index = i;
2737+
SortingObjects[i].Size = Size;
2738+
SortingObjects[i].ObjectAlignment = MFI.getObjectAlign(i);
2739+
}
2740+
2741+
// Sort objects by alignment and then by size.
2742+
llvm::stable_sort(SortingObjects, HexagonFrameSortingComparator());
2743+
2744+
// Modify the original list to represent the final order.
2745+
int i = NObjects;
2746+
for (auto &Obj : SortingObjects) {
2747+
if (i == 0)
2748+
break;
2749+
ObjectsToAllocate[--i] = Obj.Index;
2750+
}
2751+
}

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: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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-NOT: allocframe(r29,#2944):raw
7+
; CHECK: allocframe(r29,#2432):raw
8+
9+
define void @quux(ptr nocapture readonly %arg, ptr nocapture writeonly %arg1, i32 %arg2) local_unnamed_addr {
10+
bb:
11+
%shl = shl i32 %arg2, 5
12+
br label %bb3
13+
14+
bb3:
15+
%phi = phi i32 [ 0, %bb ], [ %add13, %bb3 ]
16+
%add = add i32 %phi, %shl
17+
%sext = sext i32 %add to i64
18+
%getelementptr = getelementptr float, ptr %arg, i64 %sext
19+
%load = load <32 x float>, ptr %getelementptr, align 4
20+
%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>
21+
%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>
22+
%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>
23+
%fmul6 = fmul <32 x float> %load, %fmul5
24+
%fmul7 = fmul <32 x float> %load, %fmul6
25+
%fadd = fadd <32 x float> %fmul4, %fmul7
26+
%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>
27+
%call = tail call <32 x float> @llvm.exp.v32f32(<32 x float> %fmul8)
28+
%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
29+
%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>
30+
%fdiv = fdiv <32 x float> %fsub, %fadd9
31+
%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>
32+
%fmul11 = fmul <32 x float> %fmul, %fadd10
33+
%getelementptr12 = getelementptr float, ptr %arg1, i64 %sext
34+
store <32 x float> %fmul11, ptr %getelementptr12, align 128
35+
%add13 = add nuw nsw i32 %phi, 128
36+
%icmp = icmp ult i32 %phi, 8064
37+
br i1 %icmp, label %bb3, label %bb14
38+
39+
bb14:
40+
ret void
41+
}
42+
43+
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
44+
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)