[PATCH] D15208: Patch for inline abort code generation

Alexey Samsonov via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 11 16:06:22 PST 2016


samsonov added a comment.

Sorry for delay.


================
Comment at: lib/CodeGen/CGExpr.cpp:2543
@@ +2542,3 @@
+  // RE: Bug: 25682
+  if(!CGM.getCodeGenOpts().MergeTraps || !CGM.getCodeGenOpts().OptimizationLevel || !TrapBB) {
+    // If we aren't merging traps, set the function to not be optimized as some
----------------
This condition is somewhat hard to parse. Consider inverting it:
  // Collapse all trap calls to one per function if we're optimizing, and ....
  if (TrapBB && CGM.getCodeGenOpts().OptimizationLevel && CGM.getCodeGenOpts().MergeTraps) {
    Builder.CreateCondBr(Checked, Cont, TrapBB);
  } else {
     //...
  }

================
Comment at: lib/CodeGen/CGExpr.cpp:2557
@@ +2556,3 @@
+      // This closely mirrors what is done to avoid function merging
+      // in the address sanitizer. The trap function is not set
+      // to not return as there is an unreachable instruction
----------------
Nit: AddressSanitizer, or ASan.

================
Comment at: lib/CodeGen/CGExpr.cpp:2558
@@ +2557,3 @@
+      // in the address sanitizer. The trap function is not set
+      // to not return as there is an unreachable instruction
+      // generated at the end of the block.
----------------
What's wrong with marking trap function as noreturn anyway? unreachable instruction is, well, supposed to be unreachable.

================
Comment at: lib/CodeGen/CGExpr.cpp:2560
@@ +2559,3 @@
+      // generated at the end of the block.
+      EmitTrapCall(llvm::Intrinsic::trap);
+      llvm::InlineAsm *EmptyAsm = llvm::InlineAsm::get(llvm::FunctionType::get(Builder.getVoidTy(), false),
----------------
This can also be hoisted from branches.


Repository:
  rL LLVM

http://reviews.llvm.org/D15208





More information about the cfe-commits mailing list