]> granicus.if.org Git - clang/commit
Track whether an AggValueSlot is potentially aliased, and do not
authorJohn McCall <rjmccall@apple.com>
Thu, 25 Aug 2011 23:04:34 +0000 (23:04 +0000)
committerJohn McCall <rjmccall@apple.com>
Thu, 25 Aug 2011 23:04:34 +0000 (23:04 +0000)
commit410ffb2bc5f072d58a73c14560345bcf77dec1cc
tree162e003b95c3b8460288bdb6f6ee347e3ac61a77
parent8c7e67d7644c3ab298bd6be724c9480da0979af6
Track whether an AggValueSlot is potentially aliased, and do not
emit call results into potentially aliased slots.  This allows us
to properly mark indirect return slots as noalias, at the cost
of requiring an extra memcpy when assigning an aggregate call
result into a l-value.  It also brings us into compliance with
the x86-64 ABI.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138599 91177308-0d34-0410-b5e6-96231b3b80d8
17 files changed:
lib/CodeGen/CGCall.cpp
lib/CodeGen/CGClass.cpp
lib/CodeGen/CGDecl.cpp
lib/CodeGen/CGDeclCXX.cpp
lib/CodeGen/CGExpr.cpp
lib/CodeGen/CGExprAgg.cpp
lib/CodeGen/CGObjC.cpp
lib/CodeGen/CGStmt.cpp
lib/CodeGen/CGValue.h
lib/CodeGen/CodeGenFunction.h
test/CodeGen/arm-arguments.c
test/CodeGen/arm-vector-arguments.c
test/CodeGen/blocks.c
test/CodeGen/x86_32-arguments-darwin.c
test/CodeGen/x86_64-arguments.c
test/CodeGenCXX/temporaries.cpp
test/CodeGenCXX/x86_32-arguments.cpp