[PATCH] Fix shl folding in DAG combiner.
Paweł Bylica
chfast at gmail.com
Mon Jun 22 07:58:30 PDT 2015
The code responsible for shl folding in the DAGCombiner was assuming incorrectly that all constants are less than 64 bits. This patch simply changes the way values are compared.
http://reviews.llvm.org/D10602
Files:
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
test/CodeGen/X86/fold-vector-shl-crash.ll
Index: lib/CodeGen/SelectionDAG/DAGCombiner.cpp
===================================================================
--- lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -4275,7 +4275,7 @@
if (isNullConstant(N0))
return N0;
// fold (shl x, c >= size(x)) -> undef
- if (N1C && N1C->getZExtValue() >= OpSizeInBits)
+ if (N1C && N1C->getAPIntValue().uge(OpSizeInBits))
return DAG.getUNDEF(VT);
// fold (shl x, 0) -> x
if (N1C && N1C->isNullValue())
Index: test/CodeGen/X86/fold-vector-shl-crash.ll
===================================================================
--- /dev/null
+++ test/CodeGen/X86/fold-vector-shl-crash.ll
@@ -0,0 +1,13 @@
+; RUN: llc < %s | FileCheck %s
+
+;CHECK-LABEL: test
+define void @test() {
+ %S = shufflevector <2 x i256> zeroinitializer, <2 x i256> <i256 -1, i256 -1>, <2 x i32> <i32 0, i32 2>
+ %B = shl <2 x i256> %S, <i256 -1, i256 -1> ; DAG Combiner crashes here
+ br label %Loop
+
+Loop: ; preds = %Loop, %0
+ %V = shufflevector <2 x i256> zeroinitializer, <2 x i256> %B, <2 x i32> <i32 undef, i32 3>
+ %I = insertelement <2 x i256> %V, i256 246681, i32 1
+ br label %Loop
+}
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D10602.28109.patch
Type: text/x-patch
Size: 1222 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150622/6e22bc89/attachment.bin>
More information about the llvm-commits
mailing list