[PATCH] D36504: [CodeGenPrepare][WIP] Convert uncond. branch to return into a return to help with shrink-wrapping

Jun Bum Lim via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 9 10:09:58 PDT 2017

junbuml added a comment.

- Overall, I agree with the idea. I didn't see any performance differences in Xalancbmk and h264ref on AArach64 though.  I guess this will not leave a branch instruction in the empty block as it directly return.
- Should the predecessor branching to an empty return block also be empty? Your implementation doesn't seem to check if the predecessor is empty.
- Just curious about the -5% in h264ref on PPC?

Comment at: lib/CodeGen/CodeGenPrepare.cpp:653
+  for (BasicBlock &BB : F)
+    MadeChange |= dupRetFedByEmptyBlocks(&BB);
+  return MadeChange;
Isn't it possible to do this in the main loop of eliminateMostlyEmptyBlocks()?

Comment at: lib/CodeGen/CodeGenPrepare.cpp:2625-2627
+/// Look for opportunities to duplicate a return instruction into a predecessor
+/// that does nothing but branch to the return block. Namely, duplicate a return
+/// statement in both of bb0/bb1 below:
It seems that you didn't check if the predecessor is empty? Is this what you intended? 

Comment at: lib/CodeGen/CodeGenPrepare.cpp:2639-2640
+  BasicBlock *SingleSucc = BB->getSingleSuccessor();
+  DEBUG(dbgs() << "Trying to duplicate the successor's return into: ");
+  DEBUG(BB->dump());
+  // Look at blocks that have a single successor
I guess you might reduce DEBUGs in this function. Right?

Comment at: test/CodeGen/MIR/Generic/early-ret-bb.mir:1
+# RUN: llc -run-pass codegenprepare -o - %s | FileCheck %s
Why do you use .mir, instead of .ll? 



More information about the llvm-commits mailing list