From 3d467a890e35edd913f8dee394da00744a1b58ce Mon Sep 17 00:00:00 2001 From: Alexander Kornienko Date: Wed, 6 Mar 2019 15:23:50 +0000 Subject: Revert "[CodeGen] Omit range checks from jump tables when lowering switches with unreachable default" This reverts commit 2a0f2c5ef3330846149598220467d9f3c6e8b99c (r355490). The commit causes an assertion failure when compiling LLVM code: $ cat repro.cpp class QQQ { public: bool x() const; bool y() const; unsigned getSizeInBits() const { if (y() || x()) return getScalarSizeInBits(); return getScalarSizeInBits() * 2; } unsigned getScalarSizeInBits() const; }; int f(const QQQ &Ty) { switch (Ty.getSizeInBits()) { case 1: case 8: return 0; case 16: return 1; case 32: return 2; case 64: return 3; default: __builtin_unreachable(); } } $ clang -O2 -o repro.o repro.cpp assert.h assertion failed at llvm/include/llvm/ADT/ilist_iterator.h:139 in llvm::ilist_iterator::reference llvm::ilist_iterator, true, false>::operator*() const [OptionsT = llvm::ilist_detail::node_options, IsReverse = true, IsConst = false]: !NodePtr->isKnownSentinel() *** Check failure stack trace: *** @ 0x558aab4afc10 __assert_fail @ 0x558aa885479b llvm::ilist_iterator<>::operator*() @ 0x558aa8854715 llvm::MachineInstrBundleIterator<>::operator*() @ 0x558aa92c33c3 llvm::X86InstrInfo::optimizeCompareInstr() @ 0x558aa9a9c251 (anonymous namespace)::PeepholeOptimizer::optimizeCmpInstr() @ 0x558aa9a9b371 (anonymous namespace)::PeepholeOptimizer::runOnMachineFunction() @ 0x558aa99a4fc8 llvm::MachineFunctionPass::runOnFunction() @ 0x558aab019fc4 llvm::FPPassManager::runOnFunction() @ 0x558aab01a3a5 llvm::FPPassManager::runOnModule() @ 0x558aab01aa9b (anonymous namespace)::MPPassManager::runOnModule() @ 0x558aab01a635 llvm::legacy::PassManagerImpl::run() @ 0x558aab01afe1 llvm::legacy::PassManager::run() @ 0x558aa5914769 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly() @ 0x558aa5910f44 clang::EmitBackendOutput() @ 0x558aa5906135 clang::BackendConsumer::HandleTranslationUnit() @ 0x558aa6d165ad clang::ParseAST() @ 0x558aa6a94e22 clang::ASTFrontendAction::ExecuteAction() @ 0x558aa590255d clang::CodeGenAction::ExecuteAction() @ 0x558aa6a94840 clang::FrontendAction::Execute() @ 0x558aa6a38cca clang::CompilerInstance::ExecuteAction() @ 0x558aa4e2294b clang::ExecuteCompilerInvocation() @ 0x558aa4df6200 cc1_main() @ 0x558aa4e1b37f ExecuteCC1Tool() @ 0x558aa4e1a725 main @ 0x7ff20d56abbd __libc_start_main @ 0x558aa4df51c9 _start llvm-svn: 355515 --- .../CodeGen/AArch64/switch-unreachable-default.ll | 63 ---------------------- 1 file changed, 63 deletions(-) delete mode 100644 llvm/test/CodeGen/AArch64/switch-unreachable-default.ll (limited to 'llvm/test/CodeGen/AArch64/switch-unreachable-default.ll') diff --git a/llvm/test/CodeGen/AArch64/switch-unreachable-default.ll b/llvm/test/CodeGen/AArch64/switch-unreachable-default.ll deleted file mode 100644 index ce11c14d1ca..00000000000 --- a/llvm/test/CodeGen/AArch64/switch-unreachable-default.ll +++ /dev/null @@ -1,63 +0,0 @@ -; RUN: llc -O3 -o - %s | FileCheck %s - -; Test that the output in the presence of an unreachable default does not have -; a compare and branch at the top of the switch to handle the default case. - -target triple = "aarch64-unknown-linux-gnu" - -; Function Attrs: nounwind -define void @fn(i4) { - switch i4 %0, label %default [ - i4 0, label %case_0 - i4 1, label %case_1 - i4 2, label %case_2 - i4 3, label %case_3 - i4 4, label %case_4 - i4 5, label %case_5 - ] - -; CHECK-LABEL: fn: -; CHECK-NOT: sub -; CHECK-NOT: cmp -; CHECK-NOT: b.hi -; CHECK: ldrb {{w[0-9]+}}, [{{x[0-9]+}}, {{x[0-9]+}}] -; CHECK: add {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, lsl #2 -; CHECK: br {{x[0-9]+}} - -default: - unreachable - -case_0: - tail call void @handle_case_00(i4 %0) #2 - br label %return_label - -case_1: - tail call void @handle_case_01(i4 %0) #2 - br label %return_label - -case_2: - tail call void @handle_case_02(i4 %0) #2 - br label %return_label - -case_3: - tail call void @handle_case_03(i4 %0) #2 - br label %return_label - -case_4: - tail call void @handle_case_04(i4 %0) #2 - br label %return_label - -case_5: - tail call void @handle_case_05(i4 %0) #2 - br label %return_label - -return_label: - ret void -} - -declare void @handle_case_00(i4) -declare void @handle_case_01(i4) -declare void @handle_case_02(i4) -declare void @handle_case_03(i4) -declare void @handle_case_04(i4) -declare void @handle_case_05(i4) -- cgit v1.2.3