[PATCH] D139238: [ARM] IselLowering unsigned overflow to crash using APInt in PerformSHLSimplify
Peter Rong via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 6 09:58:41 PST 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rGee31a4a7029f: [ARM] IselLowering unsigned overflow to crash using APInt in PerformSHLSimplify (authored by Peter).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D139238/new/
https://reviews.llvm.org/D139238
Files:
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/test/CodeGen/ARM/pr59317.ll
Index: llvm/test/CodeGen/ARM/pr59317.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/ARM/pr59317.ll
@@ -0,0 +1,25 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=arm %s -o - | FileCheck --check-prefix=arm %s
+; RUN: llc -mtriple=armeb %s -o - | FileCheck --check-prefix=armeb %s
+
+define i1 @pr59317(i16 %F) {
+; arm-LABEL: pr59317:
+; arm: @ %bb.0: @ %BB
+; arm-NEXT: sub sp, sp, #8
+; arm-NEXT: mov r0, #0
+; arm-NEXT: add sp, sp, #8
+; arm-NEXT: mov pc, lr
+;
+; armeb-LABEL: pr59317:
+; armeb: @ %bb.0: @ %BB
+; armeb-NEXT: sub sp, sp, #8
+; armeb-NEXT: mov r0, #0
+; armeb-NEXT: add sp, sp, #8
+; armeb-NEXT: mov pc, lr
+BB:
+ %E = extractelement <1 x i16> <i16 -1>, i16 %F
+ %RP = alloca i64, align 8
+ %B = shl i16 %E, %E
+ %C1 = icmp ugt i16 %B, %F
+ ret i1 %C1
+}
Index: llvm/lib/Target/ARM/ARMISelLowering.cpp
===================================================================
--- llvm/lib/Target/ARM/ARMISelLowering.cpp
+++ llvm/lib/Target/ARM/ARMISelLowering.cpp
@@ -13773,10 +13773,13 @@
APInt C2Int = C2->getAPIntValue();
APInt C1Int = C1ShlC2->getAPIntValue();
+ unsigned C2Width = C2Int.getBitWidth();
+ if (C2Int.uge(C2Width))
+ return SDValue();
+ uint64_t C2Value = C2Int.getZExtValue();
// Check that performing a lshr will not lose any information.
- APInt Mask = APInt::getHighBitsSet(C2Int.getBitWidth(),
- C2Int.getBitWidth() - C2->getZExtValue());
+ APInt Mask = APInt::getHighBitsSet(C2Width, C2Width - C2Value);
if ((C1Int & Mask) != C1Int)
return SDValue();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D139238.480534.patch
Type: text/x-patch
Size: 1710 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221206/b0c55cbf/attachment.bin>
More information about the llvm-commits
mailing list