Clang/LLVM 3.3 unwanted attributes being added: NoFramePointerElim

Since updating to LLVM 3.3, the system is generating attributes such as:

attributes #0 = { nounwind "less-precise-fpmad"="false"
"no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true"
"no-infs-fp-math"="false" "no-nans-fp-math"="false"
"unsafe-fp-math"="false" "use-soft-float"="false" }

I've tried to add options.

I've tracked the code to:


I've seen the description of:


RESET_OPTION(NoFramePointerElim, "no-frame-pointer-elim");
  RESET_OPTION(NoFramePointerElimNonLeaf, "no-frame-pointer-elim-non-leaf");
  RESET_OPTION(LessPreciseFPMADOption, "less-precise-fpmad");
  RESET_OPTION(UnsafeFPMath, "unsafe-fp-math");
  RESET_OPTION(NoInfsFPMath, "no-infs-fp-math");
  RESET_OPTION(NoNaNsFPMath, "no-nans-fp-math");
  RESET_OPTION(UseSoftFloat, "use-soft-float");
  RESET_OPTION(DisableTailCalls, "disable-tail-calls");

I cannot find the code or mechanism to turn off: NoFramePointerElim

No code generator has these specialized, so this is happening for all targets.

Any help?

With the new attribute system, there are some subtle differences in certain cases.

Some things are now are determined by clang and passed to llc whereas previously this only could happen if clang/llvm where run as one executable.

But now that same information can be added to attributes and passed to llc without you having to add command line parameters for those to llc.

Which compiler are you running?

You are running clang and llc separately?

Maybe this would be interesting to you: