[PATCH] D83169: [WebAssembly] Do not assume br_table range checks will be gt_u
Thomas Lively via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 4 18:23:27 PDT 2020
This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rG65330f394b2c: [WebAssembly] Do not assume br_table range checks will be gt_u (authored by tlively).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D83169/new/
https://reviews.llvm.org/D83169
Files:
llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp
Index: llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp
===================================================================
--- llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp
+++ llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp
@@ -76,17 +76,15 @@
// If the range check checks an i64 value, we cannot optimize it out because
// the i64 index is truncated to an i32, making values over 2^32
- // indistinguishable from small numbers.
+ // indistinguishable from small numbers. There are also other strange edge
+ // cases that can arise in practice that we don't want to reason about, so
+ // conservatively only perform the optimization if the range check is the
+ // normal case of an i32.gt_u.
MachineRegisterInfo &MRI = MF.getRegInfo();
auto *RangeCheck = MRI.getVRegDef(Cond[1].getReg());
assert(RangeCheck != nullptr);
- unsigned RangeCheckOp = RangeCheck->getOpcode();
- assert(RangeCheckOp == WebAssembly::GT_U_I32 ||
- RangeCheckOp == WebAssembly::GT_U_I64);
- if (RangeCheckOp == WebAssembly::GT_U_I64) {
- // Bail out and leave the jump table untouched
+ if (RangeCheck->getOpcode() != WebAssembly::GT_U_I32)
return nullptr;
- }
// Remove the dummy default target and install the real one.
MI.RemoveOperand(MI.getNumExplicitOperands() - 1);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83169.275535.patch
Type: text/x-patch
Size: 1383 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200705/248b7e65/attachment.bin>
More information about the llvm-commits
mailing list