[llvm-bugs] [Bug 44951] New: SLH assertion error: Should never have a PHI in the initial checking block as it always has a single predecessor!
via llvm-bugs
llvm-bugs at lists.llvm.org
Tue Feb 18 09:31:38 PST 2020
https://bugs.llvm.org/show_bug.cgi?id=44951
Bug ID: 44951
Summary: SLH assertion error: Should never have a PHI in the
initial checking block as it always has a single
predecessor!
Product: libraries
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Backend: X86
Assignee: unassignedbugs at nondot.org
Reporter: rupprecht at google.com
CC: craig.topper at gmail.com, llvm-bugs at lists.llvm.org,
llvm-dev at redking.me.uk, spatel+llvm at rotateright.com
Created attachment 23138
--> https://bugs.llvm.org/attachment.cgi?id=23138&action=edit
reproducer
IR reproducer (original input is a crash w/ -mspeculative-load-hardening
-fexperimental-new-pass-manager -O3):
$ cat repro.ll # Also attached to the bug
; ModuleID = 'repro.ll'
source_filename = "repro.cc"
target datalayout =
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
@y = external dso_local global i8, align 1
@ap = external dso_local local_unnamed_addr global i32, align 4
; Function Attrs: speculative_load_hardening
define dso_local void @f1() local_unnamed_addr #0 {
entry:
%0 = load i32, i32* @ap, align 4
switch i32 %0, label %sw.epilog [
i32 0, label %sw.bb
i32 1, label %sw.bb1
i32 2, label %sw.bb4
i32 3, label %sw.bb7
]
sw.bb: ; preds = %entry
call void @f2(i8* nonnull undef, i8* null)
unreachable
sw.bb1: ; preds = %entry
call void @f2(i8* nonnull undef, i8* null)
unreachable
sw.bb4: ; preds = %entry
call void @f2(i8* nonnull undef, i8* nonnull @y)
br label %sw.bb7
sw.bb7: ; preds = %sw.bb4, %entry
ret void
sw.epilog: ; preds = %entry
unreachable
}
; Function Attrs: speculative_load_hardening
declare dso_local void @f2(i8*, i8*) unnamed_addr #0
; Function Attrs: speculative_load_hardening
define dso_local void @f3() local_unnamed_addr #0 {
for.body.lr.ph:
%call4 = call { i8*, i32 } @f4(i8* nonnull undef)
%0 = extractvalue { i8*, i32 } %call4, 0
%tobool.i.i = icmp eq i8* %0, null
br i1 %tobool.i.i, label %for.cond.cleanup9, label %for.body10.outer
for.body10.outer: ; preds = %if.then.i,
%for.body.lr.ph
%ph = phi i8* [ %add.ptr.i, %if.then.i ], [ undef, %for.body.lr.ph ]
br label %for.body10
for.cond.cleanup9: ; preds = %for.body.lr.ph
%call = call zeroext i1 @f6(i8* nonnull undef)
unreachable
for.body10: ; preds = %for.body10,
%for.body10.outer
call void @f1()
%call.i = call zeroext i1 @f7()
br i1 %call.i, label %if.then.i, label %for.body10
if.then.i: ; preds = %for.body10
call void @f2(i8* nonnull undef, i8* %ph)
%add.ptr.i = getelementptr inbounds i8, i8* %ph, i64 undef
br label %for.body10.outer
}
; Function Attrs: speculative_load_hardening
declare dso_local i1 @f6(i8*) local_unnamed_addr #0
; Function Attrs: speculative_load_hardening
declare dso_local { i8*, i32 } @f4(i8*) local_unnamed_addr #0
; Function Attrs: speculative_load_hardening
declare dso_local i1 @f7() local_unnamed_addr #0
attributes #0 = { speculative_load_hardening }
$ clang++ -O3 -fexperimental-new-pass-manager -c repro.ll
clang++: llvm-project/llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp:743:
auto (anonymous
namespace)::X86SpeculativeLoadHardeningPass::tracePredStateThroughCFG(llvm::MachineFunction
&, ArrayRef<(anonymous
namespace)::X86SpeculativeLoadHardeningPass::BlockCondInfo>)::(anonymous
class)::operator()(llvm::MachineBasicBlock &, llvm::MachineBasicBlock &, int,
llvm::MachineInstr *, llvm::MachineInstr *&, ArrayRef<X86::CondCode>) const:
Assertion `(InsertPt == CheckingMBB.end() || !InsertPt->isPHI()) && "Should
never have a PHI in the initial checking block as it " "always has a single
predecessor!"' failed.
Stack dump:
0. Program arguments: clang++ -O3 -fexperimental-new-pass-manager -c
repro.ll
1. Code generation
2. Running pass 'Function Pass Manager' on module 'repro.ll'.
3. Running pass 'X86 speculative load hardening' on function '@f3'
#0 0x0000000007f89b17 llvm::sys::PrintStackTrace(llvm::raw_ostream&)
llvm-project/llvm/lib/Support/Unix/Signals.inc:564:11
<...stack unwinder...>
#11 0x00000000068c3f43 (anonymous
namespace)::X86SpeculativeLoadHardeningPass::tracePredStateThroughCFG(llvm::MachineFunction&,
llvm::ArrayRef<(anonymous
namespace)::X86SpeculativeLoadHardeningPass::BlockCondInfo>)::$_5::operator()(llvm::MachineBasicBlock&,
llvm::MachineBasicBlock&, int, llvm::MachineInstr*, llvm::MachineInstr*&,
llvm::ArrayRef<llvm::X86::CondCode>) const
llvm-project/llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp:0:11
#12 0x00000000068c063d (anonymous
namespace)::X86SpeculativeLoadHardeningPass::tracePredStateThroughCFG(llvm::MachineFunction&,
llvm::ArrayRef<(anonymous
namespace)::X86SpeculativeLoadHardeningPass::BlockCondInfo>)
llvm-project/llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp:800:9
#13 0x00000000068bed7d (anonymous
namespace)::X86SpeculativeLoadHardeningPass::runOnMachineFunction(llvm::MachineFunction&)
llvm-project/llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp:507:16
#14 0x0000000006f546d7
llvm::MachineFunctionPass::runOnFunction(llvm::Function&)
llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:73:8
#15 0x0000000007487dcc llvm::FPPassManager::runOnFunction(llvm::Function&)
llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1482:23
#16 0x00000000074881f5 llvm::FPPassManager::runOnModule(llvm::Module&)
llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1518:16
#17 0x0000000007488974 (anonymous
namespace)::MPPassManager::runOnModule(llvm::Module&)
llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1583:23
#18 0x0000000007488498 llvm::legacy::PassManagerImpl::run(llvm::Module&)
llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1695:16
#19 0x0000000007488f11 llvm::legacy::PassManager::run(llvm::Module&)
llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1726:3
#20 0x00000000082eb24d (anonymous
namespace)::EmitAssemblyHelper::EmitAssemblyWithNewPassManager(clang::BackendAction,
std::unique_ptr<llvm::raw_pwrite_stream,
std::default_delete<llvm::raw_pwrite_stream> >)
llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1362:3
#21 0x00000000082e7f3d clang::EmitBackendOutput(clang::DiagnosticsEngine&,
clang::HeaderSearchOptions const&, clang::CodeGenOptions const&,
clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout
const&, llvm::Module*, clang::BackendAction,
std::unique_ptr<llvm::raw_pwrite_stream,
std::default_delete<llvm::raw_pwrite_stream> >)
llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1580:5
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200218/1cee5fac/attachment-0001.html>
More information about the llvm-bugs
mailing list