[clang] [clang][CodeGen] Emit atomic IR instead of libcalls for misaligned po… (PR #73176)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 22 13:57:02 PST 2023
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff 07fdc084fe75f971688d4140a5bd2dcb1d60eba2 51423d866934f1507b64f8049d7cfcedf9727e43 -- clang/lib/CodeGen/CGAtomic.cpp clang/test/CodeGen/LoongArch/atomics.c clang/test/CodeGen/PowerPC/quadword-atomics.c clang/test/CodeGen/RISCV/riscv-atomics.c clang/test/CodeGen/arm-atomics-m.c clang/test/CodeGen/arm-atomics-m0.c clang/test/CodeGen/atomic-ops-libcall.c clang/test/CodeGen/atomic-ops.c clang/test/CodeGen/atomics-inlining.c clang/test/CodeGen/c11atomics.c
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/clang/lib/CodeGen/CGAtomic.cpp b/clang/lib/CodeGen/CGAtomic.cpp
index bc432afb6e..ff883e49c2 100644
--- a/clang/lib/CodeGen/CGAtomic.cpp
+++ b/clang/lib/CodeGen/CGAtomic.cpp
@@ -785,74 +785,73 @@ static void EmitAtomicOp(CodeGenFunction &CGF, AtomicExpr *Expr, Address Dest,
Builder.SetInsertPoint(ContBB);
}
-static bool
-isArithmeticOp(AtomicExpr::AtomicOp op) {
+static bool isArithmeticOp(AtomicExpr::AtomicOp op) {
switch (op) {
- case AtomicExpr::AO__atomic_add_fetch:
- case AtomicExpr::AO__atomic_fetch_add:
- case AtomicExpr::AO__c11_atomic_fetch_add:
- case AtomicExpr::AO__hip_atomic_fetch_add:
- case AtomicExpr::AO__opencl_atomic_fetch_add:
- case AtomicExpr::AO__atomic_and_fetch:
- case AtomicExpr::AO__atomic_fetch_and:
- case AtomicExpr::AO__c11_atomic_fetch_and:
- case AtomicExpr::AO__hip_atomic_fetch_and:
- case AtomicExpr::AO__opencl_atomic_fetch_and:
- case AtomicExpr::AO__atomic_or_fetch:
- case AtomicExpr::AO__atomic_fetch_or:
- case AtomicExpr::AO__c11_atomic_fetch_or:
- case AtomicExpr::AO__hip_atomic_fetch_or:
- case AtomicExpr::AO__opencl_atomic_fetch_or:
- case AtomicExpr::AO__atomic_sub_fetch:
- case AtomicExpr::AO__atomic_fetch_sub:
- case AtomicExpr::AO__c11_atomic_fetch_sub:
- case AtomicExpr::AO__hip_atomic_fetch_sub:
- case AtomicExpr::AO__opencl_atomic_fetch_sub:
- case AtomicExpr::AO__atomic_xor_fetch:
- case AtomicExpr::AO__atomic_fetch_xor:
- case AtomicExpr::AO__c11_atomic_fetch_xor:
- case AtomicExpr::AO__hip_atomic_fetch_xor:
- case AtomicExpr::AO__opencl_atomic_fetch_xor:
- case AtomicExpr::AO__atomic_nand_fetch:
- case AtomicExpr::AO__atomic_fetch_nand:
- case AtomicExpr::AO__c11_atomic_fetch_nand:
- case AtomicExpr::AO__atomic_min_fetch:
- case AtomicExpr::AO__atomic_fetch_min:
- case AtomicExpr::AO__c11_atomic_fetch_min:
- case AtomicExpr::AO__hip_atomic_fetch_min:
- case AtomicExpr::AO__opencl_atomic_fetch_min:
- case AtomicExpr::AO__atomic_max_fetch:
- case AtomicExpr::AO__atomic_fetch_max:
- case AtomicExpr::AO__c11_atomic_fetch_max:
- case AtomicExpr::AO__hip_atomic_fetch_max:
- case AtomicExpr::AO__opencl_atomic_fetch_max:
- return true;
- case AtomicExpr::AO__c11_atomic_init:
- case AtomicExpr::AO__opencl_atomic_init:
- case AtomicExpr::AO__atomic_compare_exchange:
- case AtomicExpr::AO__atomic_compare_exchange_n:
- case AtomicExpr::AO__c11_atomic_compare_exchange_weak:
- case AtomicExpr::AO__c11_atomic_compare_exchange_strong:
- case AtomicExpr::AO__hip_atomic_compare_exchange_weak:
- case AtomicExpr::AO__hip_atomic_compare_exchange_strong:
- case AtomicExpr::AO__opencl_atomic_compare_exchange_weak:
- case AtomicExpr::AO__opencl_atomic_compare_exchange_strong:
- case AtomicExpr::AO__atomic_exchange:
- case AtomicExpr::AO__atomic_exchange_n:
- case AtomicExpr::AO__c11_atomic_exchange:
- case AtomicExpr::AO__hip_atomic_exchange:
- case AtomicExpr::AO__opencl_atomic_exchange:
- case AtomicExpr::AO__atomic_store:
- case AtomicExpr::AO__atomic_store_n:
- case AtomicExpr::AO__c11_atomic_store:
- case AtomicExpr::AO__hip_atomic_store:
- case AtomicExpr::AO__opencl_atomic_store:
- case AtomicExpr::AO__atomic_load:
- case AtomicExpr::AO__atomic_load_n:
- case AtomicExpr::AO__c11_atomic_load:
- case AtomicExpr::AO__hip_atomic_load:
- case AtomicExpr::AO__opencl_atomic_load:
- return false;
+ case AtomicExpr::AO__atomic_add_fetch:
+ case AtomicExpr::AO__atomic_fetch_add:
+ case AtomicExpr::AO__c11_atomic_fetch_add:
+ case AtomicExpr::AO__hip_atomic_fetch_add:
+ case AtomicExpr::AO__opencl_atomic_fetch_add:
+ case AtomicExpr::AO__atomic_and_fetch:
+ case AtomicExpr::AO__atomic_fetch_and:
+ case AtomicExpr::AO__c11_atomic_fetch_and:
+ case AtomicExpr::AO__hip_atomic_fetch_and:
+ case AtomicExpr::AO__opencl_atomic_fetch_and:
+ case AtomicExpr::AO__atomic_or_fetch:
+ case AtomicExpr::AO__atomic_fetch_or:
+ case AtomicExpr::AO__c11_atomic_fetch_or:
+ case AtomicExpr::AO__hip_atomic_fetch_or:
+ case AtomicExpr::AO__opencl_atomic_fetch_or:
+ case AtomicExpr::AO__atomic_sub_fetch:
+ case AtomicExpr::AO__atomic_fetch_sub:
+ case AtomicExpr::AO__c11_atomic_fetch_sub:
+ case AtomicExpr::AO__hip_atomic_fetch_sub:
+ case AtomicExpr::AO__opencl_atomic_fetch_sub:
+ case AtomicExpr::AO__atomic_xor_fetch:
+ case AtomicExpr::AO__atomic_fetch_xor:
+ case AtomicExpr::AO__c11_atomic_fetch_xor:
+ case AtomicExpr::AO__hip_atomic_fetch_xor:
+ case AtomicExpr::AO__opencl_atomic_fetch_xor:
+ case AtomicExpr::AO__atomic_nand_fetch:
+ case AtomicExpr::AO__atomic_fetch_nand:
+ case AtomicExpr::AO__c11_atomic_fetch_nand:
+ case AtomicExpr::AO__atomic_min_fetch:
+ case AtomicExpr::AO__atomic_fetch_min:
+ case AtomicExpr::AO__c11_atomic_fetch_min:
+ case AtomicExpr::AO__hip_atomic_fetch_min:
+ case AtomicExpr::AO__opencl_atomic_fetch_min:
+ case AtomicExpr::AO__atomic_max_fetch:
+ case AtomicExpr::AO__atomic_fetch_max:
+ case AtomicExpr::AO__c11_atomic_fetch_max:
+ case AtomicExpr::AO__hip_atomic_fetch_max:
+ case AtomicExpr::AO__opencl_atomic_fetch_max:
+ return true;
+ case AtomicExpr::AO__c11_atomic_init:
+ case AtomicExpr::AO__opencl_atomic_init:
+ case AtomicExpr::AO__atomic_compare_exchange:
+ case AtomicExpr::AO__atomic_compare_exchange_n:
+ case AtomicExpr::AO__c11_atomic_compare_exchange_weak:
+ case AtomicExpr::AO__c11_atomic_compare_exchange_strong:
+ case AtomicExpr::AO__hip_atomic_compare_exchange_weak:
+ case AtomicExpr::AO__hip_atomic_compare_exchange_strong:
+ case AtomicExpr::AO__opencl_atomic_compare_exchange_weak:
+ case AtomicExpr::AO__opencl_atomic_compare_exchange_strong:
+ case AtomicExpr::AO__atomic_exchange:
+ case AtomicExpr::AO__atomic_exchange_n:
+ case AtomicExpr::AO__c11_atomic_exchange:
+ case AtomicExpr::AO__hip_atomic_exchange:
+ case AtomicExpr::AO__opencl_atomic_exchange:
+ case AtomicExpr::AO__atomic_store:
+ case AtomicExpr::AO__atomic_store_n:
+ case AtomicExpr::AO__c11_atomic_store:
+ case AtomicExpr::AO__hip_atomic_store:
+ case AtomicExpr::AO__opencl_atomic_store:
+ case AtomicExpr::AO__atomic_load:
+ case AtomicExpr::AO__atomic_load_n:
+ case AtomicExpr::AO__c11_atomic_load:
+ case AtomicExpr::AO__hip_atomic_load:
+ case AtomicExpr::AO__opencl_atomic_load:
+ return false;
}
llvm_unreachable("All atomic ops should be handled!");
}
@@ -1051,7 +1050,7 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
CallArgList Args;
// For non-optimized library calls, the size is the first parameter.
Args.add(RValue::get(llvm::ConstantInt::get(SizeTy, Size)),
- getContext().getSizeType());
+ getContext().getSizeType());
// The atomic address is the second parameter.
// The OpenCL atomic library functions only accept pointer arguments to
@@ -1184,7 +1183,6 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
if (E->isOpenCL()) {
LibCallName = std::string("__opencl") +
StringRef(LibCallName).drop_front(1).str();
-
}
// By default, assume we return a value of the atomic type.
if (!HaveRetTy) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/73176
More information about the cfe-commits
mailing list