[PATCH] D69118: [AArch64] Move the branch relaxation pass after BTI insertion

Momchil Velikov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 17 10:05:00 PDT 2019


chill created this revision.
chill added reviewers: t.p.northover, ostannard.
Herald added subscribers: llvm-commits, hiraditya, kristof.beyls.
Herald added a project: LLVM.

Inserting BTI instructions can push branch destinations out of range.

The branch relaxation pass itself cannot insert indirect branches since `TargetInstrInfo::insertIndirecrtBranch` is not implemented for AArch64 (guess +/-128 MB direct branch range is more than enough in practice).

Testing this is a bit tricky.

The original test case we have is 155kloc/6.1M. I've generated a test case using this program:

  #include <iostream>
  
  int main() {
    std::cout << R"src(int test();
  void g0(), g1(), g2(), g3(), g4(), e();
  
  void f(int v) {
    if ((test() & 2) == 0) {
    switch (v) {
    case 0: 
      g0();
    case 1:
      g1();
    case 2:
      g2();
    case 3:
      g3();
    }
  )src";
  
    const int N = 8176;
  
    for (int i = 0; i < N; ++i)
      std::cout << "    void h" << i << "();\n";
    for (int i = 0; i < N; ++i)
      std::cout << "    h" << i << "();\n";
  
    std::cout << R"src(
    } else {
      e();
    }
  }
  )src";
  }

which is still a bit too much to commit as a regression test, IMHO.


https://reviews.llvm.org/D69118

Files:
  llvm/lib/Target/AArch64/AArch64TargetMachine.cpp


Index: llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
===================================================================
--- llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
+++ llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
@@ -609,14 +609,15 @@
 
   if (EnableA53Fix835769)
     addPass(createAArch64A53Fix835769());
+
+  if (EnableBranchTargets)
+    addPass(createAArch64BranchTargetsPass());
+
   // Relax conditional branch instructions if they're otherwise out of
   // range of their destination.
   if (BranchRelaxation)
     addPass(&BranchRelaxationPassID);
 
-  if (EnableBranchTargets)
-    addPass(createAArch64BranchTargetsPass());
-
   if (TM->getOptLevel() != CodeGenOpt::None && EnableCompressJumpTables)
     addPass(createAArch64CompressJumpTablesPass());
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D69118.225450.patch
Type: text/x-patch
Size: 783 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191017/e0fd058b/attachment.bin>


More information about the llvm-commits mailing list