[llvm] r325325 - [LegalizeDAG] Fix legalization of SETCC

Mikhail Maltsev via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 16 01:35:16 PST 2018


Author: miyuki
Date: Fri Feb 16 01:35:16 2018
New Revision: 325325

URL: http://llvm.org/viewvc/llvm-project?rev=325325&view=rev
Log:
[LegalizeDAG] Fix legalization of SETCC

Summary:
Currently when expanding a SETCC node into a SELECT_CC, LLVM uses
an incorrect type for determining BooleanContent of the result. This
patch fixes the issue.

Fixes PR36079.

Reviewers: rogfer01, javed.absar, efriedma

Reviewed By: efriedma

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D43282

Added:
    llvm/trunk/test/CodeGen/ARM/2018-02-13-PR36079.ll
Modified:
    llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=325325&r1=325324&r2=325325&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Fri Feb 16 01:35:16 2018
@@ -3766,7 +3766,7 @@ bool SelectionDAGLegalize::ExpandNode(SD
     // illegal; expand it into a SELECT_CC.
     EVT VT = Node->getValueType(0);
     int TrueValue;
-    switch (TLI.getBooleanContents(Tmp1->getValueType(0))) {
+    switch (TLI.getBooleanContents(Tmp1.getValueType())) {
     case TargetLowering::ZeroOrOneBooleanContent:
     case TargetLowering::UndefinedBooleanContent:
       TrueValue = 1;

Added: llvm/trunk/test/CodeGen/ARM/2018-02-13-PR36079.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2018-02-13-PR36079.ll?rev=325325&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/2018-02-13-PR36079.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/2018-02-13-PR36079.ll Fri Feb 16 01:35:16 2018
@@ -0,0 +1,23 @@
+; RUN: llc -mtriple=arm-eabi -mattr=+neon < %s -o - | FileCheck %s
+
+ at c = global [4 x i32] [i32 3, i32 3, i32 3, i32 3], align 4
+ at d = common global i32 0, align 4
+
+define void @foo() local_unnamed_addr nounwind norecurse {
+entry:
+  %0 = load <4 x i32>, <4 x i32>* bitcast ([4 x i32]* @c to <4 x i32>*), align 4
+  %1 = and <4 x i32> %0,
+           <i32 1,
+            i32 zext (i1 icmp ne (i32* getelementptr inbounds ([4 x i32], [4 x i32]* @c, i32 0, i32 1), i32* @d) to i32),
+            i32 zext (i1 icmp ne (i32* getelementptr inbounds ([4 x i32], [4 x i32]* @c, i32 0, i32 2), i32* @d) to i32),
+            i32 zext (i1 icmp ne (i32* getelementptr inbounds ([4 x i32], [4 x i32]* @c, i32 0, i32 3), i32* @d) to i32)>
+  store <4 x i32> %1, <4 x i32>* bitcast ([4 x i32]* @c to <4 x i32>*), align 4
+  ret void
+; CHECK-NOT: mvnne
+; CHECK: movne r{{[0-9]+}}, #1
+; CHECK-NOT: mvnne
+; CHECK: movne r{{[0-9]+}}, #1
+; CHECK-NOT: mvnne
+; CHECK: movne r{{[0-9]+}}, #1
+; CHECK-NOT: mvnne
+}




More information about the llvm-commits mailing list