Skip to content

Commit 6877782

Browse files
[EVM] Prefer to emit PUSH0 over a DUP
Prefer to emit PUSH0 instead of DUP, as it is cheaper. Signed-off-by: Vladimir Radosavljevic <[email protected]>
1 parent 1b4a7c1 commit 6877782

File tree

5 files changed

+24
-17
lines changed

5 files changed

+24
-17
lines changed

llvm/lib/Target/EVM/EVMStackifyCodeEmitter.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,13 @@ void EVMStackifyCodeEmitter::emitStackPermutations(const Stack &TargetStack) {
408408
[&](const StackSlot *Slot) {
409409
assert(CurrentStack.size() == Emitter.stackHeight());
410410

411+
// Prefer to emit PUSH0 instead of DUP, as it is cheaper.
412+
if (isa<LiteralSlot>(Slot) &&
413+
cast<LiteralSlot>(Slot)->getValue().isZero()) {
414+
Emitter.emitConstant(0);
415+
return;
416+
}
417+
411418
// Dup the slot, if already on stack and reachable.
412419
auto SlotIt = llvm::find(llvm::reverse(CurrentStack), Slot);
413420
if (SlotIt != CurrentStack.rend()) {

llvm/test/CodeGen/EVM/bps-recursive-func-compress-stack.mir

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ body: |
140140
; CHECK-NEXT: POP_S
141141
; CHECK-NEXT: POP_S
142142
; CHECK-NEXT: PUSH0_S
143-
; CHECK-NEXT: DUP1_S
143+
; CHECK-NEXT: PUSH0_S
144144
; CHECK-NEXT: SSTORE_S
145145
; CHECK-NEXT: DUP7_S
146146
; CHECK-NEXT: SSTORE_S
@@ -168,19 +168,19 @@ body: |
168168
; CHECK-NEXT: SSTORE_S
169169
; CHECK-NEXT: PUSH_LABEL <mcsymbol >
170170
; CHECK-NEXT: PUSH0_S
171-
; CHECK-NEXT: DUP1_S
172-
; CHECK-NEXT: DUP1_S
173-
; CHECK-NEXT: DUP1_S
174-
; CHECK-NEXT: DUP1_S
175-
; CHECK-NEXT: DUP1_S
176-
; CHECK-NEXT: DUP1_S
177-
; CHECK-NEXT: DUP1_S
178-
; CHECK-NEXT: DUP1_S
179-
; CHECK-NEXT: DUP1_S
180-
; CHECK-NEXT: DUP1_S
181-
; CHECK-NEXT: DUP1_S
182-
; CHECK-NEXT: DUP1_S
183-
; CHECK-NEXT: DUP1_S
171+
; CHECK-NEXT: PUSH0_S
172+
; CHECK-NEXT: PUSH0_S
173+
; CHECK-NEXT: PUSH0_S
174+
; CHECK-NEXT: PUSH0_S
175+
; CHECK-NEXT: PUSH0_S
176+
; CHECK-NEXT: PUSH0_S
177+
; CHECK-NEXT: PUSH0_S
178+
; CHECK-NEXT: PUSH0_S
179+
; CHECK-NEXT: PUSH0_S
180+
; CHECK-NEXT: PUSH0_S
181+
; CHECK-NEXT: PUSH0_S
182+
; CHECK-NEXT: PUSH0_S
183+
; CHECK-NEXT: PUSH0_S
184184
; CHECK-NEXT: PseudoCALL @_testRemoveAndInsertBack_rt_707, <mcsymbol >
185185
; CHECK-NEXT: PseudoRET
186186
%3:gpr = ARGUMENT 0, implicit $arguments

llvm/test/CodeGen/EVM/bps-spills-1.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ body: |
614614
; CHECK-NEXT: liveins: $value_stack
615615
; CHECK-NEXT: {{ $}}
616616
; CHECK-NEXT: PUSH0_S
617-
; CHECK-NEXT: DUP1_S
617+
; CHECK-NEXT: PUSH0_S
618618
; CHECK-NEXT: SWAP2_S
619619
; CHECK-NEXT: EQ_S
620620
; CHECK-NEXT: PseudoJUMPI %bb.35

llvm/test/CodeGen/EVM/no-small-constant-unfolding.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ define void @test1() #1 {
1515
; CHECK: ; %bb.0: ; %entry
1616
; CHECK-NEXT: JUMPDEST
1717
; CHECK-NEXT: PUSH0
18-
; CHECK-NEXT: DUP1
18+
; CHECK-NEXT: PUSH0
1919
; CHECK-NEXT: RETURN
2020
entry:
2121
tail call void @llvm.evm.return(ptr addrspace(1) null, i256 0)

llvm/test/CodeGen/EVM/push0-over-dup.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ define { i256, i256 } @test() {
99
; CHECK: ; %bb.0:
1010
; CHECK-NEXT: JUMPDEST
1111
; CHECK-NEXT: PUSH0
12-
; CHECK-NEXT: DUP1
12+
; CHECK-NEXT: PUSH0
1313
; CHECK-NEXT: SWAP2
1414
; CHECK-NEXT: JUMP
1515
ret { i256, i256 } zeroinitializer

0 commit comments

Comments
 (0)