summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Blank <guy.blank@intel.com>2017-08-07 05:51:14 +0000
committerGuy Blank <guy.blank@intel.com>2017-08-07 05:51:14 +0000
commit5ca01695f7fa0625e9bdc7ddb295ca028f72fff7 (patch)
tree6747a12cb01fe98acea54f3912027798f2f2d0f5
parentb53b075bb17ff2f22ea0478304f61106ff130884 (diff)
downloadbcm5719-llvm-5ca01695f7fa0625e9bdc7ddb295ca028f72fff7.tar.gz
bcm5719-llvm-5ca01695f7fa0625e9bdc7ddb295ca028f72fff7.zip
[SelectionDAG] reset NewNodesMustHaveLegalTypes flag between basic blocks
The NewNodesMustHaveLegalTypes flag is set to false at the beginning of CodeGenAndEmitDAG, and set to true after legalizing types. But before calling CodeGenAndEmitDAG we build the DAG for the basic block. So for the first basic block NewNodesMustHaveLegalTypes would be 'false' during the SDAG building, and for all other basic blocks it would be 'true'. This patch sets the flag to false before SDAG building each basic block. Differential Revision: https://reviews.llvm.org/D33435 llvm-svn: 310239
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp3
-rw-r--r--llvm/test/CodeGen/AArch64/fold-constants.ll14
2 files changed, 15 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index ceab4d73976..0ac92b5efa2 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -646,6 +646,9 @@ static void reportFastISelFailure(MachineFunction &MF,
void SelectionDAGISel::SelectBasicBlock(BasicBlock::const_iterator Begin,
BasicBlock::const_iterator End,
bool &HadTailCall) {
+ // Allow creating illegal types during DAG building for the basic block.
+ CurDAG->NewNodesMustHaveLegalTypes = false;
+
// Lower the instructions. If a call is emitted as a tail call, cease emitting
// nodes for this block.
for (BasicBlock::const_iterator I = Begin; I != End && !SDB->HasTailCall; ++I) {
diff --git a/llvm/test/CodeGen/AArch64/fold-constants.ll b/llvm/test/CodeGen/AArch64/fold-constants.ll
index c0fec4d171c..719d3f46950 100644
--- a/llvm/test/CodeGen/AArch64/fold-constants.ll
+++ b/llvm/test/CodeGen/AArch64/fold-constants.ll
@@ -19,9 +19,19 @@ entry:
; PR25763 - folding constant vector comparisons with sign-extended result
define <8 x i16> @dotests_458() {
+; CHECK-LABEL: .LCPI1_0:
+; CHECK: .hword 0 // 0x0
+; CHECK-NEXT: .hword 0 // 0x0
+; CHECK-NEXT: .hword 65535 // 0xffff
+; CHECK-NEXT: .hword 0 // 0x0
+; CHECK-NEXT: .hword 0 // 0x0
+; CHECK-NEXT: .hword 0 // 0x0
+; CHECK-NEXT: .hword 0 // 0x0
+; CHECK-NEXT: .hword 0 // 0x0
+
; CHECK-LABEL: dotests_458
-; CHECK: movi d0, #0x00000000ff0000
-; CHECK-NEXT: sshll v0.8h, v0.8b, #0
+; CHECK: adrp x8, .LCPI1_0
+; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI1_0]
; CHECK-NEXT: ret
entry:
%vclz_v.i = call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> <i8 127, i8 38, i8 -1, i8 -128, i8 127, i8 0, i8 0, i8 0>, i1 false) #6
OpenPOWER on IntegriCloud