[clang] [Clang] Set writable and dead_on_unwind attributes on sret arguments (PR #77116)

2024-01-11 Thread Nikita Popov via cfe-commits

https://github.com/nikic closed https://github.com/llvm/llvm-project/pull/77116
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang] Set writable and dead_on_unwind attributes on sret arguments (PR #77116)

2024-01-10 Thread John McCall via cfe-commits

https://github.com/rjmccall approved this pull request.


https://github.com/llvm/llvm-project/pull/77116
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang] Set writable and dead_on_unwind attributes on sret arguments (PR #77116)

2024-01-10 Thread John McCall via cfe-commits

rjmccall wrote:

If I understand the specification of these attributes correctly, they seem 
fine.  `dead_on_unwind` is definitely fine — the return value must be treated 
as uninitialized after a call that throws.  `writable` has a somewhat loose 
specification that scares me a bit, but as long as the actual analysis is being 
properly conservative about possible aliases created during the call, I think 
it should be fine.

https://github.com/llvm/llvm-project/pull/77116
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang] Set writable and dead_on_unwind attributes on sret arguments (PR #77116)

2024-01-10 Thread Nikita Popov via cfe-commits

nikic wrote:

Some IR for reference: https://clang.godbolt.org/z/qEsP7vozW I believe that on 
unwind, the sret temporary is either entirely unused (if no cleanup landingpad 
is necessary) or we will call lifetime.end on it (which is legal for 
dead_on_unwind). This should be independent of whether copy elision is 
performed or not.

https://github.com/llvm/llvm-project/pull/77116
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang] Set writable and dead_on_unwind attributes on sret arguments (PR #77116)

2024-01-05 Thread via cfe-commits

llvmbot wrote:



@llvm/pr-subscribers-backend-x86

@llvm/pr-subscribers-clang

Author: Nikita Popov (nikic)


Changes

Set the writable and dead_on_unwind attributes for sret arguments. These 
indicate that the argument points to writable memory (and it's legal to 
introduce spurious writes to it on entry to the function) and that the argument 
memory will not be used if the call unwinds.

This enables additional MemCpyOpt/DSE/LICM optimizations.

I hope there isn't some subtle NRVO-related reason why this is illegal...

---

Patch is 416.97 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/77116.diff


134 Files Affected:

- (modified) clang/lib/CodeGen/CGCall.cpp (+2) 
- (modified) clang/test/CodeGen/2006-05-19-SingleEltReturn.c (+2-2) 
- (modified) clang/test/CodeGen/64bit-swiftcall.c (+11-11) 
- (modified) clang/test/CodeGen/CSKY/csky-abi.c (+2-2) 
- (modified) clang/test/CodeGen/CSKY/csky-hard-abi.c (+22-22) 
- (modified) clang/test/CodeGen/CSKY/csky-soft-abi.c (+22-22) 
- (modified) clang/test/CodeGen/PowerPC/aix-alignment.c (+2-2) 
- (modified) clang/test/CodeGen/PowerPC/powerpc-c99complex.c (+3-3) 
- (modified) clang/test/CodeGen/PowerPC/ppc-aggregate-abi.cpp (+11-11) 
- (modified) clang/test/CodeGen/PowerPC/ppc32-and-aix-struct-return.c (+11-11) 
- (modified) clang/test/CodeGen/PowerPC/ppc64-align-struct.c (+8-8) 
- (modified) clang/test/CodeGen/PowerPC/ppc64-elf-abi.c (+1-1) 
- (modified) clang/test/CodeGen/PowerPC/ppc64-soft-float.c (+23-23) 
- (modified) clang/test/CodeGen/PowerPC/ppc64-vector.c (+2-2) 
- (modified) clang/test/CodeGen/PowerPC/ppc64le-aggregates.c (+6-6) 
- (modified) clang/test/CodeGen/PowerPC/ppc64le-f128Aggregates.c (+2-2) 
- (modified) clang/test/CodeGen/RISCV/bfloat-abi.c (+2-2) 
- (modified) clang/test/CodeGen/RISCV/riscv-abi.cpp (+4-4) 
- (modified) clang/test/CodeGen/RISCV/riscv32-abi.c (+33-33) 
- (modified) clang/test/CodeGen/RISCV/riscv64-abi.c (+5-5) 
- (modified) clang/test/CodeGen/SystemZ/gnu-atomic-builtins-i128-8Al.c (+15-39) 
- (modified) clang/test/CodeGen/SystemZ/systemz-abi-vector.c (+62-62) 
- (modified) clang/test/CodeGen/SystemZ/systemz-abi.c (+47-47) 
- (modified) clang/test/CodeGen/SystemZ/systemz-abi.cpp (+18-18) 
- (modified) clang/test/CodeGen/SystemZ/systemz-inline-asm.c (+1-1) 
- (modified) clang/test/CodeGen/WebAssembly/wasm-arguments.c (+6-6) 
- (modified) clang/test/CodeGen/WebAssembly/wasm-varargs.c (+2-2) 
- (modified) clang/test/CodeGen/X86/x86_32-arguments-darwin.c (+9-9) 
- (modified) clang/test/CodeGen/X86/x86_32-arguments-iamcu.c (+1-1) 
- (modified) clang/test/CodeGen/X86/x86_64-arguments-nacl.c (+1-1) 
- (modified) clang/test/CodeGen/X86/x86_64-arguments-win32.c (+1-1) 
- (modified) clang/test/CodeGen/X86/x86_64-arguments.c (+3-3) 
- (modified) 
clang/test/CodeGen/aarch64-sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c (+1-1) 
- (modified) clang/test/CodeGen/aarch64-varargs.c (+2-2) 
- (modified) clang/test/CodeGen/aggregate-assign-call.c (+2-2) 
- (modified) clang/test/CodeGen/aligned-sret.c (+1-1) 
- (modified) clang/test/CodeGen/arc/arguments.c (+4-4) 
- (modified) clang/test/CodeGen/arm-aapcs-vfp.c (+1-1) 
- (modified) clang/test/CodeGen/arm-arguments.c (+14-14) 
- (modified) clang/test/CodeGen/arm-homogenous.c (+4-4) 
- (modified) clang/test/CodeGen/arm-neon-vld.c (+72-72) 
- (modified) clang/test/CodeGen/arm-swiftcall.c (+13-13) 
- (modified) clang/test/CodeGen/arm-varargs.c (+9-9) 
- (modified) clang/test/CodeGen/arm-vector-arguments.c (+3-3) 
- (modified) clang/test/CodeGen/arm-vfp16-arguments.c (+1-1) 
- (modified) clang/test/CodeGen/arm-vfp16-arguments2.cpp (+5-5) 
- (modified) clang/test/CodeGen/arm64-arguments.c (+2-2) 
- (modified) clang/test/CodeGen/arm64-microsoft-arguments.cpp (+17-17) 
- (modified) clang/test/CodeGen/arm64_32.c (+1-1) 
- (modified) clang/test/CodeGen/armv7k-abi.c (+1-1) 
- (modified) clang/test/CodeGen/attr-noundef.cpp (+3-3) 
- (modified) clang/test/CodeGen/blocks.c (+1-1) 
- (modified) clang/test/CodeGen/c11atomics-ios.c (+2-2) 
- (modified) clang/test/CodeGen/c11atomics.c (+2-2) 
- (modified) clang/test/CodeGen/ext-int-cc.c (+62-62) 
- (modified) clang/test/CodeGen/isfpclass.c (+1-1) 
- (modified) clang/test/CodeGen/lanai-arguments.c (+2-2) 
- (modified) clang/test/CodeGen/mcu-struct-return.c (+2-2) 
- (modified) clang/test/CodeGen/mingw-long-double.c (+4-4) 
- (modified) clang/test/CodeGen/mips-vector-return.c (+3-3) 
- (modified) clang/test/CodeGen/mips-zero-sized-struct.c (+1-1) 
- (modified) clang/test/CodeGen/mips64-nontrivial-return.cpp (+1-1) 
- (modified) clang/test/CodeGen/mips64-padding-arg.c (+3-3) 
- (modified) clang/test/CodeGen/ms_abi.c (+2-2) 
- (modified) clang/test/CodeGen/paren-list-agg-init.cpp (+3-3) 
- (modified) clang/test/CodeGen/regcall2.c (+1-1) 
- (modified) clang/test/CodeGen/regparm-struct.c (+1-1) 
- (modified) clang/test/CodeGen/renderscript.c (+9-9) 
- (modified) clang/test/CodeGen/sparcv9-abi.c (+1-1) 
- (modified)