aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorJonas Paulsson <paulsson@linux.vnet.ibm.com>2018-05-25 08:42:02 +0000
committerJonas Paulsson <paulsson@linux.vnet.ibm.com>2018-05-25 08:42:02 +0000
commit7d484fae2be8cbaafb1c3b42b659089df5a77d9c (patch)
tree1accc905e7405b50d84c4df084e530ae088a58fe /clang/lib/Frontend/CompilerInvocation.cpp
parentad8b7c1190b963e9df1757fbb28f14f2f34ec9a2 (diff)
downloadllvm-7d484fae2be8cbaafb1c3b42b659089df5a77d9c.zip
llvm-7d484fae2be8cbaafb1c3b42b659089df5a77d9c.tar.gz
llvm-7d484fae2be8cbaafb1c3b42b659089df5a77d9c.tar.bz2
[RegUsageInfoCollector] Bugfix for callee saved registers.
Previously, this pass would look at the (static) set returned by getCallPreservedMask() and add those back as preserved in the case when isSafeForNoCSROpt() returns false. A problem is that a target may have to save some registers even when NoCSROpt takes place. For instance, on SystemZ, the return register is needed upon return from a function. Furthermore, getCallPreservedMask() only includes the registers that the target actually wishes to emit save/restore instructions for. This means that subregs and (fully saved) superregs are missing. This patch instead takes the (dynamic) set returned by target for the function from determineCalleeSaves() and then adds sub/super regs to build the set to be used when building the RegMask for the function. Review: Quentin Colombet, Ulrich Weigand https://reviews.llvm.org/D46315 llvm-svn: 333261
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions