[clang] [RISCV] Support predefined marcro __riscv_misaligned_[fast,avoid]. (PR #65756)
https://github.com/yetingk edited https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
MaskRay wrote: > [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. The majority of patches don't add a trailing period in the title. https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
@@ -1228,3 +1228,15 @@ // RUN: -march=rv64i_zve32x_zvkt1p0 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-ZVKT-EXT %s // CHECK-ZVKT-EXT: __riscv_zvkt 100{{$}} + +// RUN: %clang --target=riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ MaskRay wrote: Remove `-x c` (redundant) and indent the continuation lines by 2 https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/MaskRay approved this pull request. https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/MaskRay edited https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/topperc approved this pull request. LGTM https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
yetingk wrote: Ping. https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
@@ -1220,3 +1220,15 @@ // RUN: -march=rv64i_zve32x_zvkt1p0 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-ZVKT-EXT %s // CHECK-ZVKT-EXT: __riscv_zvkt 100{{$}} + +// RUN: %clang -target riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ yetingk wrote: After https://github.com/llvm/llvm-project/pull/66572 merged, I have rebased the patch on this. https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
llvmbot wrote: @llvm/pr-subscribers-clang Changes RISC-V C API introduced predefined macro to achieve hints about unaligned accesses ([pr]). This patch defines __riscv_misaligned_fast when using -mno-strict-align, otherwise, defines __riscv_misaligned_avoid. Note: This ignores __riscv_misaligned_slow which is also defined by spec. [pr]: https://github.com/riscv-non-isa/riscv-c-api-doc/pull/40 --- Full diff: https://github.com/llvm/llvm-project/pull/65756.diff 3 Files Affected: - (modified) clang/lib/Basic/Targets/RISCV.cpp (+7) - (modified) clang/lib/Basic/Targets/RISCV.h (+3) - (modified) clang/test/Preprocessor/riscv-target-features.c (+12) ``diff diff --git a/clang/lib/Basic/Targets/RISCV.cpp b/clang/lib/Basic/Targets/RISCV.cpp index d55ab76395c8271..119d905be57249b 100644 --- a/clang/lib/Basic/Targets/RISCV.cpp +++ b/clang/lib/Basic/Targets/RISCV.cpp @@ -204,6 +204,11 @@ void RISCVTargetInfo::getTargetDefines(const LangOptions , if (VScale && VScale->first && VScale->first == VScale->second) Builder.defineMacro("__riscv_v_fixed_vlen", Twine(VScale->first * llvm::RISCV::RVVBitsPerBlock)); + + if (FastUnalignedAccess) +Builder.defineMacro("__riscv_misaligned_fast"); + else +Builder.defineMacro("__riscv_misaligned_avoid"); } static constexpr Builtin::Info BuiltinInfo[] = { @@ -322,6 +327,8 @@ bool RISCVTargetInfo::handleTargetFeatures(std::vector , if (ISAInfo->hasExtension("zfh") || ISAInfo->hasExtension("zhinx")) HasLegalHalfType = true; + FastUnalignedAccess = llvm::is_contained(Features, "+unaligned-scalar-mem"); + return true; } diff --git a/clang/lib/Basic/Targets/RISCV.h b/clang/lib/Basic/Targets/RISCV.h index 6be0e49ca2f5525..e5424d318401fb0 100644 --- a/clang/lib/Basic/Targets/RISCV.h +++ b/clang/lib/Basic/Targets/RISCV.h @@ -29,6 +29,9 @@ class RISCVTargetInfo : public TargetInfo { std::string ABI, CPU; std::unique_ptr ISAInfo; +private: + bool FastUnalignedAccess; + public: RISCVTargetInfo(const llvm::Triple , const TargetOptions &) : TargetInfo(Triple) { diff --git a/clang/test/Preprocessor/riscv-target-features.c b/clang/test/Preprocessor/riscv-target-features.c index 4dd83cfa0620b90..4db1cf7a49272fb 100644 --- a/clang/test/Preprocessor/riscv-target-features.c +++ b/clang/test/Preprocessor/riscv-target-features.c @@ -1228,3 +1228,15 @@ // RUN: -march=rv64i_zve32x_zvkt1p0 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-ZVKT-EXT %s // CHECK-ZVKT-EXT: __riscv_zvkt 100{{$}} + +// RUN: %clang --target=riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ +// RUN: -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-AVOID +// RUN: %clang --target=riscv64-unknown-linux-gnu -march=rv64i -x c -E -dM %s \ +// RUN: -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-AVOID +// CHECK-MISALIGNED-AVOID: __riscv_misaligned_avoid 1 + +// RUN: %clang --target=riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ +// RUN: -munaligned-access -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-FAST +// RUN: %clang --target=riscv64-unknown-linux-gnu -march=rv64i -x c -E -dM %s \ +// RUN: -munaligned-access -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-FAST +// CHECK-MISALIGNED-FAST: __riscv_misaligned_fast 1 `` https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/yetingk updated https://github.com/llvm/llvm-project/pull/65756 >From 391711dd39e2ee2e8f5d3dac6f466649238f4517 Mon Sep 17 00:00:00 2001 From: Yeting Kuo Date: Fri, 8 Sep 2023 19:46:03 +0800 Subject: [PATCH] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. RISC-V C API introduce predefined macro to achieve hints about unaligned accesses [0]. This defines __riscv_misaligned_fast when using -mno-strict-align, otherwise, defines __riscv_misaligned_avoid. Note: This ignores __riscv_misaligned_slow which is also defined by spec. The spec has mentioned https://github.com/riscv-non-isa/riscv-c-api-doc/pull/40 [0]: https://github.com/riscv-non-isa/riscv-c-api-doc/pull/40 --- clang/lib/Basic/Targets/RISCV.cpp | 7 +++ clang/lib/Basic/Targets/RISCV.h | 3 +++ clang/test/Preprocessor/riscv-target-features.c | 12 3 files changed, 22 insertions(+) diff --git a/clang/lib/Basic/Targets/RISCV.cpp b/clang/lib/Basic/Targets/RISCV.cpp index d55ab76395c8271..119d905be57249b 100644 --- a/clang/lib/Basic/Targets/RISCV.cpp +++ b/clang/lib/Basic/Targets/RISCV.cpp @@ -204,6 +204,11 @@ void RISCVTargetInfo::getTargetDefines(const LangOptions , if (VScale && VScale->first && VScale->first == VScale->second) Builder.defineMacro("__riscv_v_fixed_vlen", Twine(VScale->first * llvm::RISCV::RVVBitsPerBlock)); + + if (FastUnalignedAccess) +Builder.defineMacro("__riscv_misaligned_fast"); + else +Builder.defineMacro("__riscv_misaligned_avoid"); } static constexpr Builtin::Info BuiltinInfo[] = { @@ -322,6 +327,8 @@ bool RISCVTargetInfo::handleTargetFeatures(std::vector , if (ISAInfo->hasExtension("zfh") || ISAInfo->hasExtension("zhinx")) HasLegalHalfType = true; + FastUnalignedAccess = llvm::is_contained(Features, "+unaligned-scalar-mem"); + return true; } diff --git a/clang/lib/Basic/Targets/RISCV.h b/clang/lib/Basic/Targets/RISCV.h index 6be0e49ca2f5525..e5424d318401fb0 100644 --- a/clang/lib/Basic/Targets/RISCV.h +++ b/clang/lib/Basic/Targets/RISCV.h @@ -29,6 +29,9 @@ class RISCVTargetInfo : public TargetInfo { std::string ABI, CPU; std::unique_ptr ISAInfo; +private: + bool FastUnalignedAccess; + public: RISCVTargetInfo(const llvm::Triple , const TargetOptions &) : TargetInfo(Triple) { diff --git a/clang/test/Preprocessor/riscv-target-features.c b/clang/test/Preprocessor/riscv-target-features.c index 4dd83cfa0620b90..4db1cf7a49272fb 100644 --- a/clang/test/Preprocessor/riscv-target-features.c +++ b/clang/test/Preprocessor/riscv-target-features.c @@ -1228,3 +1228,15 @@ // RUN: -march=rv64i_zve32x_zvkt1p0 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-ZVKT-EXT %s // CHECK-ZVKT-EXT: __riscv_zvkt 100{{$}} + +// RUN: %clang --target=riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ +// RUN: -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-AVOID +// RUN: %clang --target=riscv64-unknown-linux-gnu -march=rv64i -x c -E -dM %s \ +// RUN: -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-AVOID +// CHECK-MISALIGNED-AVOID: __riscv_misaligned_avoid 1 + +// RUN: %clang --target=riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ +// RUN: -munaligned-access -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-FAST +// RUN: %clang --target=riscv64-unknown-linux-gnu -march=rv64i -x c -E -dM %s \ +// RUN: -munaligned-access -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-FAST +// CHECK-MISALIGNED-FAST: __riscv_misaligned_fast 1 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/yetingk edited https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
@@ -1220,3 +1220,15 @@ // RUN: -march=rv64i_zve32x_zvkt1p0 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-ZVKT-EXT %s // CHECK-ZVKT-EXT: __riscv_zvkt 100{{$}} + +// RUN: %clang -target riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ yetingk wrote: I created a pr https://github.com/llvm/llvm-project/pull/66572 for this. https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/yetingk edited https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/yetingk edited https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
@@ -1220,3 +1220,15 @@ // RUN: -march=rv64i_zve32x_zvkt1p0 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-ZVKT-EXT %s // CHECK-ZVKT-EXT: __riscv_zvkt 100{{$}} + +// RUN: %clang -target riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ yetingk wrote: > Should we update this test file to use --target= for all test cases in > another patch? I think I can have a pr for this. https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
@@ -1220,3 +1220,15 @@ // RUN: -march=rv64i_zve32x_zvkt1p0 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-ZVKT-EXT %s // CHECK-ZVKT-EXT: __riscv_zvkt 100{{$}} + +// RUN: %clang -target riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ topperc wrote: Should we update this test file to use `--target=` for all test cases in another patch? Getting a review comment for copy and pasting from an existing test case is frustrating. https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
yetingk wrote: Ping. https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
@@ -322,6 +327,8 @@ bool RISCVTargetInfo::handleTargetFeatures(std::vector , if (ISAInfo->hasExtension("zfh") || ISAInfo->hasExtension("zhinx")) HasLegalHalfType = true; + FastUnalignedAccess = llvm::is_contained(Features, "+unaligned-scalar-mem"); yetingk wrote: I think clang will does feature canonicalization before calling `handleTargetFeatures`. It's the piece of code about that in `clang/lib/Basic/Targets.cpp`. ``` for (const auto : Opts->FeatureMap) Opts->Features.push_back((F.getValue() ? "+" : "-") + F.getKey().str()); // Sort here, so we handle the features in a predictable order. (This matters // when we're dealing with features that overlap.) llvm::sort(Opts->Features); if (!Target->handleTargetFeatures(Opts->Features, Diags)) return nullptr; ``` https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
@@ -322,6 +327,8 @@ bool RISCVTargetInfo::handleTargetFeatures(std::vector , if (ISAInfo->hasExtension("zfh") || ISAInfo->hasExtension("zhinx")) HasLegalHalfType = true; + FastUnalignedAccess = llvm::is_contained(Features, "+unaligned-scalar-mem"); jrtc27 wrote: What about --target-features +unaligned-scalar-mem --target-features -unaligned-scalar-mem? Unless this has been canonicalised you don't know it's not overridden. https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/jrtc27 edited https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
@@ -1220,3 +1220,15 @@ // RUN: -march=rv64i_zve32x_zvkt1p0 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-ZVKT-EXT %s // CHECK-ZVKT-EXT: __riscv_zvkt 100{{$}} + +// RUN: %clang -target riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ jrtc27 wrote: To be fair, the tests in this file are currently %clang. I would argue we should be consistent, which either means %clang here or someone converting the others to %clang_cc1 (so long as those still make sense as cc1 tests) https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
@@ -1220,3 +1220,15 @@ // RUN: -march=rv64i_zve32x_zvkt1p0 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-ZVKT-EXT %s // CHECK-ZVKT-EXT: __riscv_zvkt 100{{$}} + +// RUN: %clang -target riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ MaskRay wrote: Use `--target=` for new tests. `-target ` has been deprecated since 3.4. Prefer `%clang_cc1` for tests outside of test/Driver. https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/yetingk edited https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/yetingk edited https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/github-actions[bot] labeled https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/yetingk created https://github.com/llvm/llvm-project/pull/65756: RISC-V C API introduced predefined macro to achieve hints about unaligned accesses [0]. This patch defines __riscv_misaligned_fast when using -mno-strict-align, otherwise, defines __riscv_misaligned_avoid. Note: This ignores __riscv_misaligned_slow which is also defined by spec. The spec has mentioned https://github.com/riscv-non-isa/riscv-c-api-doc/pull/40 [0]: https://github.com/riscv-non-isa/riscv-c-api-doc/pull/40 >From 4d5ad30326642ac6dfce478f7726bafbf51b041c Mon Sep 17 00:00:00 2001 From: Yeting Kuo Date: Fri, 8 Sep 2023 19:46:03 +0800 Subject: [PATCH] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. RISC-V C API introduce predefined macro to achieve hints about unaligned accesses [0]. This defines __riscv_misaligned_fast when using -mno-strict-align, otherwise, defines __riscv_misaligned_avoid. Note: This ignores __riscv_misaligned_slow which is also defined by spec. The spec has mentioned https://github.com/riscv-non-isa/riscv-c-api-doc/pull/40 [0]: https://github.com/riscv-non-isa/riscv-c-api-doc/pull/40 --- clang/lib/Basic/Targets/RISCV.cpp | 7 +++ clang/lib/Basic/Targets/RISCV.h | 3 +++ clang/test/Preprocessor/riscv-target-features.c | 12 3 files changed, 22 insertions(+) diff --git a/clang/lib/Basic/Targets/RISCV.cpp b/clang/lib/Basic/Targets/RISCV.cpp index d55ab76395c8271..119d905be57249b 100644 --- a/clang/lib/Basic/Targets/RISCV.cpp +++ b/clang/lib/Basic/Targets/RISCV.cpp @@ -204,6 +204,11 @@ void RISCVTargetInfo::getTargetDefines(const LangOptions , if (VScale && VScale->first && VScale->first == VScale->second) Builder.defineMacro("__riscv_v_fixed_vlen", Twine(VScale->first * llvm::RISCV::RVVBitsPerBlock)); + + if (FastUnalignedAccess) +Builder.defineMacro("__riscv_misaligned_fast"); + else +Builder.defineMacro("__riscv_misaligned_avoid"); } static constexpr Builtin::Info BuiltinInfo[] = { @@ -322,6 +327,8 @@ bool RISCVTargetInfo::handleTargetFeatures(std::vector , if (ISAInfo->hasExtension("zfh") || ISAInfo->hasExtension("zhinx")) HasLegalHalfType = true; + FastUnalignedAccess = llvm::is_contained(Features, "+unaligned-scalar-mem"); + return true; } diff --git a/clang/lib/Basic/Targets/RISCV.h b/clang/lib/Basic/Targets/RISCV.h index 6be0e49ca2f5525..e5424d318401fb0 100644 --- a/clang/lib/Basic/Targets/RISCV.h +++ b/clang/lib/Basic/Targets/RISCV.h @@ -29,6 +29,9 @@ class RISCVTargetInfo : public TargetInfo { std::string ABI, CPU; std::unique_ptr ISAInfo; +private: + bool FastUnalignedAccess; + public: RISCVTargetInfo(const llvm::Triple , const TargetOptions &) : TargetInfo(Triple) { diff --git a/clang/test/Preprocessor/riscv-target-features.c b/clang/test/Preprocessor/riscv-target-features.c index 02b67dc7944ba88..17e281a81e785b3 100644 --- a/clang/test/Preprocessor/riscv-target-features.c +++ b/clang/test/Preprocessor/riscv-target-features.c @@ -1220,3 +1220,15 @@ // RUN: -march=rv64i_zve32x_zvkt1p0 -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-ZVKT-EXT %s // CHECK-ZVKT-EXT: __riscv_zvkt 100{{$}} + +// RUN: %clang -target riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ +// RUN: -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-AVOID +// RUN: %clang -target riscv64-unknown-linux-gnu -march=rv64i -x c -E -dM %s \ +// RUN: -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-AVOID +// CHECK-MISALIGNED-AVOID: __riscv_misaligned_avoid 1 + +// RUN: %clang -target riscv32-unknown-linux-gnu -march=rv32i -x c -E -dM %s \ +// RUN: -munaligned-access -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-FAST +// RUN: %clang -target riscv64-unknown-linux-gnu -march=rv64i -x c -E -dM %s \ +// RUN: -munaligned-access -o - | FileCheck %s --check-prefix=CHECK-MISALIGNED-FAST +// CHECK-MISALIGNED-FAST: __riscv_misaligned_fast 1 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [RISCV] Support predefined marcro __riscv_misaligned_{fast,avoid}. (PR #65756)
https://github.com/yetingk review_requested https://github.com/llvm/llvm-project/pull/65756 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits