tianshilei1992 added inline comments.
================ Comment at: clang/test/OpenMP/atomic_compare_codegen.cpp:1 +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _ +// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -target-cpu core2 -fopenmp -fopenmp-version=51 -x c -emit-llvm %s -o - | FileCheck %s ---------------- The test case itself was generated from a Python script. ================ Comment at: clang/test/OpenMP/atomic_compare_codegen.cpp:3 +// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -target-cpu core2 -fopenmp -fopenmp-version=51 -x c -emit-llvm %s -o - | FileCheck %s +// %clang_cc1 -fopenmp -fopenmp-version=51 -x c -triple x86_64-apple-darwin10 -target-cpu core2 -emit-pch -o %t %s +// %clang_cc1 -fopenmp -fopenmp-version=51 -x c -triple x86_64-apple-darwin10 -target-cpu core2 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s ---------------- This test cannot be done because clang crashed. I filed a bug https://github.com/llvm/llvm-project/issues/53601. ================ Comment at: clang/test/OpenMP/atomic_compare_codegen.cpp:6 + +// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -target-cpu core2 -fopenmp-simd -fopenmp-version=51 -x c -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s +// %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c -triple x86_64-apple-darwin10 -target-cpu core2 -emit-pch -o %t %s ---------------- CodeGen for `-fopen-simd` is wrong. It doesn't emit corresponding atomic operations. I'll fix it. ================ Comment at: llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp:3496 : Builder.CreateBitCast(X.Var, IntCastTy->getPointerTo(Addrspace)); + Value *NewE = E->getType()->isFloatingPointTy() + ? Builder.CreateFPToSI(E, IntCastTy) ---------------- This change will be separated. Actually I got a question about whether we want support equality comparison for floating point values. In the patch, we don't support '<' or '>' for floating point values because we don't have corresponding atomic instruction for them. For '==', we cast them to integers and then compare the two integers. However, We all know it doesn't make too much sense to compare two floating point variables, such as `x == d`. The comparison of floating point variables should always do like `x - d < epsilon`. However, like we said before, that comparison cannot be done because of lack of instruction. So I'm not sure if we want to support floating point variables at all. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D118632/new/ https://reviews.llvm.org/D118632 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits