[PATCH] D62555: [TailDuplicator] prevent tail duplication for INLINEASM_BR

Peter Smith via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed May 29 03:16:12 PDT 2019

peter.smith added a comment.

I can see how this change would prevent the TailDuplication pass from duplicating blocks with callbr instructions, however I'm not sure if that is sufficient, or if it is too restrictive.

- Is it possible to write C code that results in IR as if the TailDuplication pass has duplicated the callbr, or is there a fundamental part of asm goto that prevents this from happening?
- Do we know of other passes that might fail due to TailDuplication of callbr?
- Could this be fixed in the if conversion pass  IfConverter::ScanInstructions() by having TargetInstrInfo::isPredicable(MachineInstr&) reject TargetOpcode::INLINEASM_BR?

If there are many other things that are broken by duplicating callbr then this patch is definitely the right thing to do. If it is just if conversion then it may be best to fix it there? Apologies I'm not an expert in this area, so I'm happy to defer. May be best to try some more reviewers to take a look.

Comment at: llvm/lib/CodeGen/TailDuplicator.cpp:783
   if (!PredCond.empty())
     return false;
+  for (MachineInstr &I : *TailBB)
I think it will be worth a comment saying why we can't tail duplicate blocks with asm goto?

Comment at: llvm/lib/CodeGen/TailDuplicator.cpp:784
     return false;
+  for (MachineInstr &I : *TailBB)
+    if (I.getOpcode() == TargetOpcode::INLINEASM_BR)
Is the INLINEASM_BR more likely to terminate the basic block, if it is then maybe a reverse iterator will find them faster? Although I suspect that most basic blocks won't contain any so it won't matter much anyway.

  rG LLVM Github Monorepo



More information about the llvm-commits mailing list