Skip to content

Commit d2b5701

Browse files
committed
Revert "Add peephole optimisation"
This reverts commit c8ad813.
1 parent 91d5986 commit d2b5701

File tree

4 files changed

+8
-68
lines changed

4 files changed

+8
-68
lines changed

llvm/lib/Target/WebAssembly/WebAssemblyDebugFixup.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -122,20 +122,9 @@ bool WebAssemblyDebugFixup::runOnMachineFunction(MachineFunction &MF) {
122122
// it will be culled later.
123123
}
124124
} else {
125-
126-
// WebAssembly Peephole optimisation can remove instructions around wasm unreachable.
127-
// This is valid for wasm, as unreachable is operand stack polymorphic. But this is not modeled
128-
// in llvm at the moment, and so the stack may not seem to pop all that it pushes.
129-
// Clear the stack so we don't violate the assert(Stack.empty()) later on.
130-
if (MI.getOpcode() == WebAssembly::UNREACHABLE) {
131-
Stack.clear();
132-
break;
133-
}
134-
135125
// Track stack depth.
136126
for (MachineOperand &MO : reverse(MI.explicit_uses())) {
137127
if (MO.isReg() && MFI.isVRegStackified(MO.getReg())) {
138-
assert(Stack.size() != 0 && "WebAssemblyDebugFixup: Pop: Operand stack empty!");
139128
auto Prev = Stack.back();
140129
Stack.pop_back();
141130
assert(Prev.Reg == MO.getReg() &&

llvm/lib/Target/WebAssembly/WebAssemblyPeephole.cpp

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include "llvm/CodeGen/MachineFunctionPass.h"
2121
#include "llvm/CodeGen/MachineInstrBuilder.h"
2222
#include "llvm/CodeGen/MachineRegisterInfo.h"
23-
#include <iterator>
2423
using namespace llvm;
2524

2625
#define DEBUG_TYPE "wasm-peephole"
@@ -110,53 +109,6 @@ static bool maybeRewriteToFallthrough(MachineInstr &MI, MachineBasicBlock &MBB,
110109
return true;
111110
}
112111

113-
static bool eraseDeadCodeAroundUnreachable(MachineInstr &UnreachbleMI, MachineBasicBlock &MBB) {
114-
SmallVector<MachineInstr*, 16> ToDelete;
115-
116-
// Because wasm unreachable is stack polymorphic and unconditionally ends control,
117-
// all instructions after it can be removed until the end of this block.
118-
// We remove the common case of double unreachable.
119-
auto ForwardsIterator = UnreachbleMI.getIterator();
120-
for (ForwardsIterator++; !ForwardsIterator.isEnd(); ForwardsIterator++) {
121-
MachineInstr& MI = *ForwardsIterator;
122-
if (MI.getOpcode() == WebAssembly::UNREACHABLE) {
123-
ToDelete.push_back(&MI);
124-
} else {
125-
break;
126-
}
127-
}
128-
129-
[&]() {
130-
// For the same reasons as above, previous instructions that only affect
131-
// local function state can be removed (e.g. local.set, drop, various reads).
132-
// We remove the common case of "drop unreachable".
133-
auto BackwardsIterator = UnreachbleMI.getReverseIterator();
134-
for (BackwardsIterator++; !BackwardsIterator.isEnd(); BackwardsIterator++) {
135-
MachineInstr& MI = *BackwardsIterator;
136-
switch(MI.getOpcode()) {
137-
case WebAssembly::DROP_I32:
138-
case WebAssembly::DROP_I64:
139-
case WebAssembly::DROP_F32:
140-
case WebAssembly::DROP_F64:
141-
case WebAssembly::DROP_EXTERNREF:
142-
case WebAssembly::DROP_FUNCREF:
143-
case WebAssembly::DROP_V128:
144-
ToDelete.push_back(&MI);
145-
continue;
146-
default:
147-
return;
148-
}
149-
}
150-
}();
151-
152-
bool Changed = false;
153-
for (MachineInstr* MI : ToDelete) {
154-
MI->eraseFromParent();
155-
Changed = true;
156-
}
157-
return Changed;
158-
}
159-
160112
bool WebAssemblyPeephole::runOnMachineFunction(MachineFunction &MF) {
161113
LLVM_DEBUG({
162114
dbgs() << "********** Peephole **********\n"
@@ -207,9 +159,6 @@ bool WebAssemblyPeephole::runOnMachineFunction(MachineFunction &MF) {
207159
case WebAssembly::RETURN:
208160
Changed |= maybeRewriteToFallthrough(MI, MBB, MF, MFI, MRI, TII);
209161
break;
210-
case WebAssembly::UNREACHABLE:
211-
Changed |= eraseDeadCodeAroundUnreachable(MI, MBB);
212-
break;
213162
}
214163

215164
return Changed;

llvm/test/CodeGen/WebAssembly/unreachable.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ define void @trap_unreach() {
4141
; CHECK: .functype trap_unreach () -> ()
4242
; CHECK-NEXT: # %bb.0:
4343
; CHECK-NEXT: unreachable
44+
; CHECK-NEXT: unreachable
4445
; CHECK-NEXT: end_function
4546
call void @llvm.trap()
4647
unreachable
@@ -98,6 +99,7 @@ define i32 @i32_sig_match_unreach() {
9899
; CHECK: .functype i32_sig_match_unreach () -> (i32)
99100
; CHECK-NEXT: # %bb.0:
100101
; CHECK-NEXT: call ext_func_i32
102+
; CHECK-NEXT: drop
101103
; CHECK-NEXT: unreachable
102104
; CHECK-NEXT: end_function
103105
call i32 @ext_func_i32()

llvm/test/MC/WebAssembly/global-ctor-dtor.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,29 +80,29 @@ declare void @func3()
8080
; CHECK-NEXT: Offset: 0x1D
8181
; CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB
8282
; CHECK-NEXT: Index: 6
83-
; CHECK-NEXT: Offset: 0x2B
83+
; CHECK-NEXT: Offset: 0x2C
8484
; CHECK-NEXT: - Type: R_WASM_TABLE_INDEX_SLEB
8585
; CHECK-NEXT: Index: 5
86-
; CHECK-NEXT: Offset: 0x36
86+
; CHECK-NEXT: Offset: 0x37
8787
; CHECK-NEXT: - Type: R_WASM_MEMORY_ADDR_SLEB
8888
; CHECK-NEXT: Index: 3
89-
; CHECK-NEXT: Offset: 0x3E
89+
; CHECK-NEXT: Offset: 0x3F
9090
; CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB
9191
; CHECK-NEXT: Index: 4
92-
; CHECK-NEXT: Offset: 0x44
92+
; CHECK-NEXT: Offset: 0x45
9393
; CHECK-NEXT: Functions:
9494
; CHECK-NEXT: - Index: 5
9595
; CHECK-NEXT: Locals:
9696
; CHECK-NEXT: Body: 1080808080000B
9797
; CHECK-NEXT: - Index: 6
9898
; CHECK-NEXT: Locals:
99-
; CHECK-NEXT: Body: 02404181808080004100418080808000108180808000450D00000B0B
99+
; CHECK-NEXT: Body: 02404181808080004100418080808000108180808000450D0000000B0B
100100
; CHECK-NEXT: - Index: 7
101101
; CHECK-NEXT: Locals:
102102
; CHECK-NEXT: Body: 1082808080000B
103103
; CHECK-NEXT: - Index: 8
104104
; CHECK-NEXT: Locals:
105-
; CHECK-NEXT: Body: 02404182808080004100418080808000108180808000450D00000B0B
105+
; CHECK-NEXT: Body: 02404182808080004100418080808000108180808000450D0000000B0B
106106
; CHECK-NEXT: - Type: DATA
107107
; CHECK-NEXT: Segments:
108108
; CHECK-NEXT: - SectionOffset: 6

0 commit comments

Comments
 (0)