[PATCH] D63692: [LSR] Improved code generation for Zero Compare loops
ChenZheng via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 25 19:50:48 PDT 2019
shchenz requested changes to this revision.
shchenz added a comment.
This revision now requires changes to proceed.
This patch causes a lot of cases fail except platform X86 and ARM.
And there is a compiling time crash:
: 'RUN: at line 6'; /home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc -switch-peel-threshold=101 < /home/czhengsz/llvm_new/llvm-project/llvm/test/CodeGen/SystemZ/loop-03.ll -mtriple=s390x-linux-gnu -mcpu=z13 | /home/czhengsz/llvm_new/llvm-project/llvm/build/bin/FileCheck /home/czhengsz/llvm_new/llvm-project/llvm/test/CodeGen/SystemZ/loop-03.ll
--
Exit Code: 2
Command Output (stderr):
--
llc: /home/czhengsz/llvm_new/llvm-project/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp:3350: void {anonymous}::LSRInstance::InsertSupplementalFormula(const llvm::SCEV*, {anonymous}::LSRUse&, size_t): Assertion `Inserted && "Supplemental formula already exists!"' failed.
Stack dump:
0. Program arguments: /home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc -switch-peel-threshold=101 -mtriple=s390x-linux-gnu -mcpu=z13
1. Running pass 'Function Pass Manager' on module '<stdin>'.
2. Running pass 'Loop Pass Manager' on function '@fun0'
3. Running pass 'Loop Strength Reduction' on basic block '%23'
#0 0x00000000127b8768 llvm::sys::PrintStackTrace(llvm::raw_ostream&) (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x127b8768)
#1 0x00000000127b8890 PrintStackTraceSignalHandler(void*) (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x127b8890)
#2 0x00000000127b6324 llvm::sys::RunSignalHandlers() (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x127b6324)
#3 0x00000000127b6504 SignalHandler(int) (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x127b6504)
#4 0x00003fffb6470478 (linux-vdso64.so.1+0x478)
#5 0x00003fffb5d0e100 raise (/opt/at12.0/lib64/power8/libc.so.6+0x4e100)
#6 0x00003fffb5ce4598 abort (/opt/at12.0/lib64/power8/libc.so.6+0x24598)
#7 0x00003fffb5cfb624 (/opt/at12.0/lib64/power8/libc.so.6+0x3b624)
#8 0x00003fffb5cfb6c4 __assert_fail (/opt/at12.0/lib64/power8/libc.so.6+0x3b6c4)
#9 0x000000001220151c (anonymous namespace)::LSRInstance::InsertSupplementalFormula(llvm::SCEV const*, (anonymous namespace)::LSRUse&, unsigned long) (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x1220151c)
#10 0x0000000012209050 (anonymous namespace)::LSRInstance::CollectFixupsAndInitialFormulae() (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x12209050)
#11 0x0000000012212908 ReduceLoopStrength(llvm::Loop*, llvm::IVUsers&, llvm::ScalarEvolution&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::TargetTransformInfo const&) (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x12212908)
#12 0x00000000117e5938 llvm::LPPassManager::runOnFunction(llvm::Function&) (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x117e5938)
#13 0x00000000120240b0 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x120240b0)
#14 0x00000000120242f8 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x120242f8)
#15 0x00000000120230e0 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x120230e0)
#16 0x000000001202350c llvm::legacy::PassManager::run(llvm::Module&) (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x1202350c)
#17 0x00000000103b585c compileModule(char**, llvm::LLVMContext&) (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x103b585c)
#18 0x0000000010318678 main (/home/czhengsz/llvm_new/llvm-project/llvm/build/bin/llc+0x10318678)
#19 0x00003fffb5ce4bf8 (/opt/at12.0/lib64/power8/libc.so.6+0x24bf8)
#20 0x00003fffb5ce4e04 __libc_start_main (/opt/at12.0/lib64/power8/libc.so.6+0x24e04)
FileCheck error: '-' is empty.
FileCheck command line: /home/czhengsz/llvm_new/llvm-project/llvm/build/bin/FileCheck /home/czhengsz/llvm_new/llvm-project/llvm/test/CodeGen/SystemZ/loop-03.ll
I think these failures should be fixed firstly.
One opinion about this patch's example, seems you found the improvement for X86, because `incl` loop(negative loop count) on X86 can use the instruction `movl`+ `leal`, but `decl` loop(positive loop count) uses `addl` + `pushl` + `popl` + `subl`.
As I know, PowerPC has hardware loop, it needs the loop count must be a positive value. This patch changes all loop to a `incl` loop with negative loop count which is surely a deg for PowerPC. So maybe you need to treat this improvement for specific platform by using some target hook function?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D63692/new/
https://reviews.llvm.org/D63692
More information about the llvm-commits
mailing list