I think the best solution here is definitely to let the backend handle 
outlining handler functions: to get reasonable code, the outlining has to be 
done by something that understands the layout of the outer function's frame, 
and only the backend can do that.  No high-level intrinsic can capture the 
relationship between the functions in any sort of reliable way without 
completely disabling inlining of the outer function.  And we really want to 
still be able to do data-flow optimizations in the outer function; we just have 
to ensure that any live-in values have been spilled to the stack at the call 
site.

Unfortunately, I think the same principle is going to end up applying to filter 
functions.  If they don't use values from the enclosing frame, then fine, you 
can outline them in the frontend; but if they do there's just no way that a 
frontend solution is ever going to work.  This might mean that we need to 
change the invoke IR pattern again so that the filter functions are just basic 
blocks within the function (which end in some special intrinsic/instruction 
that guides outlining).

I think you need to have that conversation on the LLVM side before you can make 
any useful progress on the Clang side.  Please CC me on that conversation when 
you start it.

================
Comment at: lib/CodeGen/CGException.cpp:113
@@ +112,3 @@
+      CGM.getTarget().getCXXABI().isItaniumFamily()) {
+    name = "_ZSt9terminatev";
+  } else if (CGM.getLangOpts().ObjC1 &&
----------------
Seems like a reasonable thing for the CXXABI to return.

================
Comment at: lib/CodeGen/CGException.cpp:437
@@ +436,3 @@
+  const EHPersonality &P = EHPersonality::get(CGM);
+  return StringRef("__C_specific_handler") == P.PersonalityFn;
+}
----------------
Don't do this.  Make a flag somehow.

http://reviews.llvm.org/D5607



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to