[PATCH] D149699: [InstCombine] Improve bswap optimization
Nathan Chancellor via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun May 7 17:55:09 PDT 2023
nathanchance added a comment.
This patch causes an assertion failure when building the Linux kernel for PowerPC. A reduced LLVM IR reproducer (and the C reproducer it was derived from):
target datalayout = "e-m:e-Fn32-i64:64-n32:64-S128-v256:256:256-v512:512:512"
target triple = "powerpc64le-unknown-linux-gnu"
@_end = external global [0 x i8]
define void @__attribute__kexec_setup(ptr %kernel_end) {
entry:
%0 = call i64 @llvm.bswap.i64(i64 and (i64 ptrtoint (ptr @_end to i64), i64 4095))
store i64 %0, ptr %kernel_end, align 8
ret void
}
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.bswap.i64(i64) #0
attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
extern char _end[];
long kernel_end;
void __attribute__kexec_setup() {
kernel_end = __builtin_bswap64(({ (long)_end & 4095; }));
}
$ opt -O3 -disable-output reduced.ll
opt: /mnt/nvme/tmp/cvise.COqG3u2BwX/src/llvm/include/llvm/Support/Casting.h:578: decltype(auto) llvm::cast(From *) [To = llvm::BinaryOperator, From = llvm::Value]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: opt -O3 -disable-output reduced.ll
#0 0x00005628ee047568 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/mnt/nvme/tmp/cvise.COqG3u2BwX/install/llvm-bad/bin/opt+0x4b8b568)
#1 0x00005628ee0452ee llvm::sys::RunSignalHandlers() (/mnt/nvme/tmp/cvise.COqG3u2BwX/install/llvm-bad/bin/opt+0x4b892ee)
#2 0x00005628ee047d28 SignalHandler(int) Signals.cpp:0:0
#3 0x00007fd4ef6efab0 (/usr/lib/libc.so.6+0x39ab0)
#4 0x00007fd4ef73f26c (/usr/lib/libc.so.6+0x8926c)
#5 0x00007fd4ef6efa08 raise (/usr/lib/libc.so.6+0x39a08)
#6 0x00007fd4ef6d8538 abort (/usr/lib/libc.so.6+0x22538)
#7 0x00007fd4ef6d845c (/usr/lib/libc.so.6+0x2245c)
#8 0x00007fd4ef6e83d6 (/usr/lib/libc.so.6+0x323d6)
#9 0x00005628edc4a2c2 llvm::Instruction* foldBitOrderCrossLogicOp<9u>(llvm::Value*, llvm::IRBuilder<llvm::TargetFolder, llvm::IRBuilderCallbackInserter>&) InstCombineCalls.cpp:0:0
#10 0x00005628edc46269 llvm::InstCombinerImpl::visitCallInst(llvm::CallInst&) InstCombineCalls.cpp:0:0
#11 0x00005628edbec59f llvm::InstCombinerImpl::run() InstructionCombining.cpp:0:0
#12 0x00005628edbeee45 combineInstructionsOverFunction(llvm::Function&, llvm::InstructionWorklist&, llvm::AAResults*, llvm::AssumptionCache&, llvm::TargetLibraryInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::OptimizationRemarkEmitter&, llvm::BlockFrequencyInfo*, llvm::ProfileSummaryInfo*, unsigned int, llvm::LoopInfo*) InstructionCombining.cpp:0:0
#13 0x00005628edbee605 llvm::InstCombinePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/mnt/nvme/tmp/cvise.COqG3u2BwX/install/llvm-bad/bin/opt+0x4732605)
#14 0x00005628ee24841d llvm::detail::PassModel<llvm::Function, llvm::InstCombinePass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#15 0x00005628edb00004 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/mnt/nvme/tmp/cvise.COqG3u2BwX/install/llvm-bad/bin/opt+0x4644004)
#16 0x00005628ec6ba78d llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) BPFTargetMachine.cpp:0:0
#17 0x00005628edb04273 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/mnt/nvme/tmp/cvise.COqG3u2BwX/install/llvm-bad/bin/opt+0x4648273)
#18 0x00005628ec6ba52d llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) BPFTargetMachine.cpp:0:0
#19 0x00005628edaff1f4 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/mnt/nvme/tmp/cvise.COqG3u2BwX/install/llvm-bad/bin/opt+0x46431f4)
#20 0x00005628ec1a08eb llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/mnt/nvme/tmp/cvise.COqG3u2BwX/install/llvm-bad/bin/opt+0x2ce48eb)
#21 0x00005628ec1b0111 main (/mnt/nvme/tmp/cvise.COqG3u2BwX/install/llvm-bad/bin/opt+0x2cf4111)
#22 0x00007fd4ef6d9850 (/usr/lib/libc.so.6+0x23850)
#23 0x00007fd4ef6d990a __libc_start_main (/usr/lib/libc.so.6+0x2390a)
#24 0x00005628ec19a265 _start (/mnt/nvme/tmp/cvise.COqG3u2BwX/install/llvm-bad/bin/opt+0x2cde265)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D149699/new/
https://reviews.llvm.org/D149699
More information about the llvm-commits
mailing list