[llvm-branch-commits] [libcxx] release/18.x: [libc++][modules] Fix disabling Unicode (#81294) (PR #81361)
https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/81361 Backport 30cd1838dc334775f7a29f57b581f2bdda3f0ea1 Requested by: @poyaoc97 >From 91cb452c3cd1e527dd74ece20a83b9fb2ffa6f5c Mon Sep 17 00:00:00 2001 From: Po-yao Chang Date: Sat, 10 Feb 2024 22:22:16 +0800 Subject: [PATCH] [libc++][modules] Fix disabling Unicode (#81294) -DLIBCXX_ENABLE_UNICODE=OFF or -D_LIBCPP_HAS_NO_UNICODE doesn't build without this change. (cherry picked from commit 30cd1838dc334775f7a29f57b581f2bdda3f0ea1) --- libcxx/modules/std/ostream.inc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libcxx/modules/std/ostream.inc b/libcxx/modules/std/ostream.inc index 8fcbfb4bdc1828..0e0e2d54fe6bae 100644 --- a/libcxx/modules/std/ostream.inc +++ b/libcxx/modules/std/ostream.inc @@ -33,8 +33,10 @@ export namespace std { using std::println; using std::vprint_nonunicode; +#ifndef _LIBCPP_HAS_NO_UNICODE using std::vprint_unicode; -# endif // _LIBCPP_STD_VER >= 23 +#endif // _LIBCPP_HAS_NO_UNICODE +# endif // _LIBCPP_STD_VER >= 23 #endif // _LIBCPP_HAS_NO_LOCALIZATION } // namespace std ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [libcxx] release/18.x: [libc++][modules] Fix disabling Unicode (#81294) (PR #81361)
https://github.com/llvmbot milestoned https://github.com/llvm/llvm-project/pull/81361 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [libcxx] release/18.x: [libc++][modules] Fix disabling Unicode (#81294) (PR #81361)
llvmbot wrote: @mordante What do you think about merging this PR to the release branch? https://github.com/llvm/llvm-project/pull/81361 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [libcxx] release/18.x: [libc++][modules] Fix disabling Unicode (#81294) (PR #81361)
llvmbot wrote: @llvm/pr-subscribers-libcxx Author: None (llvmbot) Changes Backport 30cd1838dc334775f7a29f57b581f2bdda3f0ea1 Requested by: @poyaoc97 --- Full diff: https://github.com/llvm/llvm-project/pull/81361.diff 1 Files Affected: - (modified) libcxx/modules/std/ostream.inc (+3-1) ``diff diff --git a/libcxx/modules/std/ostream.inc b/libcxx/modules/std/ostream.inc index 8fcbfb4bdc1828..0e0e2d54fe6bae 100644 --- a/libcxx/modules/std/ostream.inc +++ b/libcxx/modules/std/ostream.inc @@ -33,8 +33,10 @@ export namespace std { using std::println; using std::vprint_nonunicode; +#ifndef _LIBCPP_HAS_NO_UNICODE using std::vprint_unicode; -# endif // _LIBCPP_STD_VER >= 23 +#endif // _LIBCPP_HAS_NO_UNICODE +# endif // _LIBCPP_STD_VER >= 23 #endif // _LIBCPP_HAS_NO_LOCALIZATION } // namespace std `` https://github.com/llvm/llvm-project/pull/81361 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [libcxx] release/18.x: [libc++][modules] Fix disabling Unicode (#81294) (PR #81361)
https://github.com/mordante approved this pull request. https://github.com/llvm/llvm-project/pull/81361 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [mlir] release/18.x: [mlir] Skip invalid test on big endian platform (s390x) (#80246) (PR #81373)
https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/81373 Backport 65ac8c16e028b23b49fd6b03817faa1ab6c0229d Requested by: @tstellar >From 11fb729fc0e0fe4ee0bd754ee3d37f7ba674c6de Mon Sep 17 00:00:00 2001 From: Kai Sasaki Date: Fri, 2 Feb 2024 17:07:44 +0900 Subject: [PATCH] [mlir] Skip invalid test on big endian platform (s390x) (#80246) The buildbot test running on s390x platform keeps failing since [this time](https://lab.llvm.org/buildbot/#/builders/199/builds/31136). This is because of the dependency on the endianness of the platform. It expects the format invalid in the big endian platform (s390x). We can simply skip it. See: https://discourse.llvm.org/t/mlir-s390x-linux-failure/76695 (cherry picked from commit 65ac8c16e028b23b49fd6b03817faa1ab6c0229d) --- .../Target/LLVMIR/llvmir-le-specific.mlir | 27 +++ mlir/test/Target/LLVMIR/llvmir.mlir | 23 2 files changed, 27 insertions(+), 23 deletions(-) create mode 100644 mlir/test/Target/LLVMIR/llvmir-le-specific.mlir diff --git a/mlir/test/Target/LLVMIR/llvmir-le-specific.mlir b/mlir/test/Target/LLVMIR/llvmir-le-specific.mlir new file mode 100644 index 00..f8d082082117cb --- /dev/null +++ b/mlir/test/Target/LLVMIR/llvmir-le-specific.mlir @@ -0,0 +1,27 @@ +// RUN: mlir-translate -mlir-to-llvmir -split-input-file %s | FileCheck %s + +// Decoding the attribute does not work on big-endian platforms currently +// XFAIL: target=s390x-{{.*}} + +// CHECK{LITERAL}: @dense_resource_tensor_constant = internal constant [5 x float] [float 0x3FCA03408000, float 0xBFD04663, float 0xBFD75DDF8000, float 0xBFDE074F4000, float 0x3FDDD3A1C000] +llvm.mlir.global internal constant @dense_resource_tensor_constant(dense_resource : tensor<5xf32>) : !llvm.array<5 x f32> + +// CHECK{LITERAL}: @dense_resource_vector_constant = internal constant <5 x float> +llvm.mlir.global internal constant @dense_resource_vector_constant(dense_resource : vector<5xf32>) : vector<5xf32> + + +// CHECK{LITERAL}: @dense_resource_multidim_tensor_constant = internal constant [1 x [2 x [2 x float]]] [[2 x [2 x float]] [[2 x float] [float 0x3FD6B46A8000, float 0x3FD6781AC000], [2 x float] [float 0xBFB45A2AA000, float 0x3FD77A5CA000]]] +llvm.mlir.global internal constant @dense_resource_multidim_tensor_constant(dense_resource : tensor<1x2x2xf32>) : !llvm.array<1 x !llvm.array<2 x !llvm.array<2 x f32>>> + +// CHECK{LITERAL}: @dense_resource_multidim_vector_constant = internal constant [1 x [2 x <2 x float>]] [[2 x <2 x float>] [<2 x float> , <2 x float> ]] +llvm.mlir.global internal constant @dense_resource_multidim_vector_constant(dense_resource : vector<1x2x2xf32>) : !llvm.array<1 x !llvm.array<2 x vector<2 x f32>>> + +// Resources are kept at end of file. New tests should be added above this. +{-# + dialect_resources: { +builtin: { + dense_resource_test_5xf32: "0x0800041A503E183382BEFCEEBABE7A3AF0BE0E9DEE3E", + dense_resource_test_2x2xf32: "0x080054A3B53ED6C0B33E55D1A2BDE5D2BB3E" +} + } +#-} \ No newline at end of file diff --git a/mlir/test/Target/LLVMIR/llvmir.mlir b/mlir/test/Target/LLVMIR/llvmir.mlir index 448aa3a5d85d79..961c9484446845 100644 --- a/mlir/test/Target/LLVMIR/llvmir.mlir +++ b/mlir/test/Target/LLVMIR/llvmir.mlir @@ -101,19 +101,6 @@ llvm.mlir.global internal @dense_float_vector_3d(dense<[[[1.0, 2.0], [3.0, 4.0]] // CHECK{LITERAL}: @splat_float_vector_3d = internal global [2 x [2 x <2 x float>]] [[2 x <2 x float>] [<2 x float> , <2 x float> ], [2 x <2 x float>] [<2 x float> , <2 x float> ]] llvm.mlir.global internal @splat_float_vector_3d(dense<42.0> : vector<2x2x2xf32>) : !llvm.array<2 x !llvm.array<2 x vector<2xf32>>> -// CHECK{LITERAL}: @dense_resource_tensor_constant = internal constant [5 x float] [float 0x3FCA03408000, float 0xBFD04663, float 0xBFD75DDF8000, float 0xBFDE074F4000, float 0x3FDDD3A1C000] -llvm.mlir.global internal constant @dense_resource_tensor_constant(dense_resource : tensor<5xf32>) : !llvm.array<5 x f32> - -// CHECK{LITERAL}: @dense_resource_vector_constant = internal constant <5 x float> -llvm.mlir.global internal constant @dense_resource_vector_constant(dense_resource : vector<5xf32>) : vector<5xf32> - - -// CHECK{LITERAL}: @dense_resource_multidim_tensor_constant = internal constant [1 x [2 x [2 x float]]] [[2 x [2 x float]] [[2 x float] [float 0x3FD6B46A8000, float 0x3FD6781AC000], [2 x float] [float 0xBFB45A2AA000, float 0x3FD77A5CA000]]] -llvm.mlir.global internal constant @dense_resource_multidim_tensor_constant(dense_resource : tensor<1x2x2xf32>) : !llvm.array<1 x !llvm.array<2 x !llvm.array<2 x f32>>> - -// CHECK{LITERAL}: @dense_resource_multidim_vector_constant = internal constant [1 x [2 x <2 x float>]] [[2 x <2 x float>] [<2 x float> , <2 x float> ]] -llvm.mlir.global internal constant @dense_resource_multidi
[llvm-branch-commits] [mlir] release/18.x: [mlir] Skip invalid test on big endian platform (s390x) (#80246) (PR #81373)
https://github.com/llvmbot milestoned https://github.com/llvm/llvm-project/pull/81373 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [mlir] release/18.x: [mlir] Skip invalid test on big endian platform (s390x) (#80246) (PR #81373)
llvmbot wrote: @efriedma-quic What do you think about merging this PR to the release branch? https://github.com/llvm/llvm-project/pull/81373 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [mlir] release/18.x: [mlir] Skip invalid test on big endian platform (s390x) (#80246) (PR #81373)
llvmbot wrote: @llvm/pr-subscribers-mlir-llvm Author: None (llvmbot) Changes Backport 65ac8c16e028b23b49fd6b03817faa1ab6c0229d Requested by: @tstellar --- Full diff: https://github.com/llvm/llvm-project/pull/81373.diff 2 Files Affected: - (added) mlir/test/Target/LLVMIR/llvmir-le-specific.mlir (+27) - (modified) mlir/test/Target/LLVMIR/llvmir.mlir (-23) ``diff diff --git a/mlir/test/Target/LLVMIR/llvmir-le-specific.mlir b/mlir/test/Target/LLVMIR/llvmir-le-specific.mlir new file mode 100644 index 00..f8d082082117cb --- /dev/null +++ b/mlir/test/Target/LLVMIR/llvmir-le-specific.mlir @@ -0,0 +1,27 @@ +// RUN: mlir-translate -mlir-to-llvmir -split-input-file %s | FileCheck %s + +// Decoding the attribute does not work on big-endian platforms currently +// XFAIL: target=s390x-{{.*}} + +// CHECK{LITERAL}: @dense_resource_tensor_constant = internal constant [5 x float] [float 0x3FCA03408000, float 0xBFD04663, float 0xBFD75DDF8000, float 0xBFDE074F4000, float 0x3FDDD3A1C000] +llvm.mlir.global internal constant @dense_resource_tensor_constant(dense_resource : tensor<5xf32>) : !llvm.array<5 x f32> + +// CHECK{LITERAL}: @dense_resource_vector_constant = internal constant <5 x float> +llvm.mlir.global internal constant @dense_resource_vector_constant(dense_resource : vector<5xf32>) : vector<5xf32> + + +// CHECK{LITERAL}: @dense_resource_multidim_tensor_constant = internal constant [1 x [2 x [2 x float]]] [[2 x [2 x float]] [[2 x float] [float 0x3FD6B46A8000, float 0x3FD6781AC000], [2 x float] [float 0xBFB45A2AA000, float 0x3FD77A5CA000]]] +llvm.mlir.global internal constant @dense_resource_multidim_tensor_constant(dense_resource : tensor<1x2x2xf32>) : !llvm.array<1 x !llvm.array<2 x !llvm.array<2 x f32>>> + +// CHECK{LITERAL}: @dense_resource_multidim_vector_constant = internal constant [1 x [2 x <2 x float>]] [[2 x <2 x float>] [<2 x float> , <2 x float> ]] +llvm.mlir.global internal constant @dense_resource_multidim_vector_constant(dense_resource : vector<1x2x2xf32>) : !llvm.array<1 x !llvm.array<2 x vector<2 x f32>>> + +// Resources are kept at end of file. New tests should be added above this. +{-# + dialect_resources: { +builtin: { + dense_resource_test_5xf32: "0x0800041A503E183382BEFCEEBABE7A3AF0BE0E9DEE3E", + dense_resource_test_2x2xf32: "0x080054A3B53ED6C0B33E55D1A2BDE5D2BB3E" +} + } +#-} \ No newline at end of file diff --git a/mlir/test/Target/LLVMIR/llvmir.mlir b/mlir/test/Target/LLVMIR/llvmir.mlir index 448aa3a5d85d79..961c9484446845 100644 --- a/mlir/test/Target/LLVMIR/llvmir.mlir +++ b/mlir/test/Target/LLVMIR/llvmir.mlir @@ -101,19 +101,6 @@ llvm.mlir.global internal @dense_float_vector_3d(dense<[[[1.0, 2.0], [3.0, 4.0]] // CHECK{LITERAL}: @splat_float_vector_3d = internal global [2 x [2 x <2 x float>]] [[2 x <2 x float>] [<2 x float> , <2 x float> ], [2 x <2 x float>] [<2 x float> , <2 x float> ]] llvm.mlir.global internal @splat_float_vector_3d(dense<42.0> : vector<2x2x2xf32>) : !llvm.array<2 x !llvm.array<2 x vector<2xf32>>> -// CHECK{LITERAL}: @dense_resource_tensor_constant = internal constant [5 x float] [float 0x3FCA03408000, float 0xBFD04663, float 0xBFD75DDF8000, float 0xBFDE074F4000, float 0x3FDDD3A1C000] -llvm.mlir.global internal constant @dense_resource_tensor_constant(dense_resource : tensor<5xf32>) : !llvm.array<5 x f32> - -// CHECK{LITERAL}: @dense_resource_vector_constant = internal constant <5 x float> -llvm.mlir.global internal constant @dense_resource_vector_constant(dense_resource : vector<5xf32>) : vector<5xf32> - - -// CHECK{LITERAL}: @dense_resource_multidim_tensor_constant = internal constant [1 x [2 x [2 x float]]] [[2 x [2 x float]] [[2 x float] [float 0x3FD6B46A8000, float 0x3FD6781AC000], [2 x float] [float 0xBFB45A2AA000, float 0x3FD77A5CA000]]] -llvm.mlir.global internal constant @dense_resource_multidim_tensor_constant(dense_resource : tensor<1x2x2xf32>) : !llvm.array<1 x !llvm.array<2 x !llvm.array<2 x f32>>> - -// CHECK{LITERAL}: @dense_resource_multidim_vector_constant = internal constant [1 x [2 x <2 x float>]] [[2 x <2 x float>] [<2 x float> , <2 x float> ]] -llvm.mlir.global internal constant @dense_resource_multidim_vector_constant(dense_resource : vector<1x2x2xf32>) : !llvm.array<1 x !llvm.array<2 x vector<2 x f32>>> - // // Linkage attribute. // @@ -1590,16 +1577,6 @@ llvm.func @invokeLandingpad() -> i32 attributes { personality = @__gxx_personali llvm.invoke %9(%6, %0) to ^bb2 unwind ^bb1 vararg(!llvm.func) : !llvm.ptr, (!llvm.ptr, i32) -> () } -// Resources are kept at end of file. New tests should be added above this. -{-# - dialect_resources: { -builtin: { - dense_resource_test_5xf32: "0x0800041A503E183382BEFCEEBABE7A3AF0BE0E9DEE3E", - dense_resource_test_2x2xf32: "0x080054A3B53ED6C0B33E55D1A2BDE5D2BB3E" -} - } -#-} - // - llvm
[llvm-branch-commits] [mlir] release/18.x: [mlir] Skip invalid test on big endian platform (s390x) (#80246) (PR #81373)
https://github.com/joker-eph approved this pull request. https://github.com/llvm/llvm-project/pull/81373 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [CallPromotionUtils]Implement conditional indirect call promotion with vtable-based comparison (PR #81378)
https://github.com/minglotus-6 created https://github.com/llvm/llvm-project/pull/81378 None >From ac5dc1bf77b67cbf0aa5e2c8fb6a7ce0080fb501 Mon Sep 17 00:00:00 2001 From: mingmingl Date: Sat, 10 Feb 2024 12:03:25 -0800 Subject: [PATCH] [CallPromotionUtils]Implement conditional indirect call promotion with vtable-based comparison --- .../Transforms/Utils/CallPromotionUtils.h | 50 ++- .../Transforms/Utils/CallPromotionUtils.cpp | 64 - .../Utils/CallPromotionUtilsTest.cpp | 127 ++ 3 files changed, 233 insertions(+), 8 deletions(-) diff --git a/llvm/include/llvm/Transforms/Utils/CallPromotionUtils.h b/llvm/include/llvm/Transforms/Utils/CallPromotionUtils.h index fcb384ec361339..5f3a71206876c6 100644 --- a/llvm/include/llvm/Transforms/Utils/CallPromotionUtils.h +++ b/llvm/include/llvm/Transforms/Utils/CallPromotionUtils.h @@ -14,10 +14,17 @@ #ifndef LLVM_TRANSFORMS_UTILS_CALLPROMOTIONUTILS_H #define LLVM_TRANSFORMS_UTILS_CALLPROMOTIONUTILS_H +#include + +#include "llvm/ADT/ArrayRef.h" + namespace llvm { +class Constant; class CallBase; class CastInst; class Function; +class GlobalVariable; +class Instruction; class MDNode; class Value; @@ -41,7 +48,9 @@ bool isLegalToPromote(const CallBase &CB, Function *Callee, CallBase &promoteCall(CallBase &CB, Function *Callee, CastInst **RetBitCast = nullptr); -/// Promote the given indirect call site to conditionally call \p Callee. +/// Promote the given indirect call site to conditionally call \p Callee. The +/// promoted direct call instruction is predicated on `CB.getCalledOperand() == +/// Callee`. /// /// This function creates an if-then-else structure at the location of the call /// site. The original call site is moved into the "else" block. A clone of the @@ -51,6 +60,31 @@ CallBase &promoteCall(CallBase &CB, Function *Callee, CallBase &promoteCallWithIfThenElse(CallBase &CB, Function *Callee, MDNode *BranchWeights = nullptr); +/// This is similar to `promoteCallWithIfThenElse` except that the condition to +/// promote a virtual call is that \p VPtr is the same as any of \p +/// AddressPoints. +/// +/// This function is expected to be used on virtual calls (a subset of indirect +/// calls). \p VPtr is the virtual table address stored in the objects, and +/// \p AddressPoints contains address points of vtables to be compared with. +/// +/// It's the responsibility of caller to guarantee the transformation +/// correctness (by specifying \p VPtr and \p AddressPoints properly). +/// +/// This function doesn't sink the address-calculation instructions of indirect +/// callee to the indirect call fallback. The subsequent passes (e.g. +/// inst-combine) should sink them if possible and handle the sink of debug +/// intrinsics together. +CallBase &promoteCallWithVTableCmp(CallBase &CB, Instruction *VPtr, + Function *Callee, + ArrayRef AddressPoints, + MDNode *BranchWeights); + +/// Returns a constant representing the vtable's address point specified by the +/// offset. Caller should ensure \p AddressPointOffset is valid. +Constant *getVTableAddressPointOffset(GlobalVariable *VTable, + uint32_t AddressPointOffset); + /// Try to promote (devirtualize) a virtual call on an Alloca. Return true on /// success. /// @@ -74,13 +108,17 @@ CallBase &promoteCallWithIfThenElse(CallBase &CB, Function *Callee, /// bool tryPromoteCall(CallBase &CB); +/// Predicate and clone the given call site using the given condition. +CallBase &versionCallSiteWithCond(CallBase &CB, Value *Cond, + MDNode *BranchWeights); + /// Predicate and clone the given call site. /// -/// This function creates an if-then-else structure at the location of the call -/// site. The "if" condition compares the call site's called value to the given -/// callee. The original call site is moved into the "else" block, and a clone -/// of the call site is placed in the "then" block. The cloned instruction is -/// returned. +/// This function creates an if-then-else structure at the location of the +/// call site. The "if" condition compares the call site's called value to +/// the given callee. The original call site is moved into the "else" block, +/// and a clone of the call site is placed in the "then" block. The cloned +/// instruction is returned. CallBase &versionCallSite(CallBase &CB, Value *Callee, MDNode *BranchWeights); } // end namespace llvm diff --git a/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp b/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp index d0cf0792eface0..ea855b9a4d8416 100644 --- a/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp +++ b/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp @@ -12,9 +12,11 @@ //===--
[llvm-branch-commits] [llvm] [CallPromotionUtils]Implement conditional indirect call promotion with vtable-based comparison (PR #81378)
https://github.com/minglotus-6 edited https://github.com/llvm/llvm-project/pull/81378 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [mlir] release/18.x: [mlir] Skip invalid test on big endian platform (s390x) (#80246) (PR #81373)
https://github.com/zero9178 approved this pull request. https://github.com/llvm/llvm-project/pull/81373 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] release/18.x: [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) (PR #81384)
https://github.com/llvmbot milestoned https://github.com/llvm/llvm-project/pull/81384 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] release/18.x: [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) (PR #81384)
https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/81384 Backport 0df8aed6c30f08ded526038a6bbb4daf113a31c1 Requested by: @mstorsjo >From 39c63f3d7636f3d42d882ca58302882b56b22d96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Sat, 10 Feb 2024 23:57:12 +0200 Subject: [PATCH] [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) The SOURCE_DATE_EPOCH environment variable can be set in order to get reproducible build. When linking PE/COFF modules with LLD, the timestamp field is set to the current time, unless either the /timestamp: or /Brepro option is set. If neither of them is set, check the SOURCE_DATE_EPOCH variable, before resorting to using the actual current date and time. See https://reproducible-builds.org/docs/source-date-epoch/ for reference on the use of this variable. (cherry picked from commit 0df8aed6c30f08ded526038a6bbb4daf113a31c1) --- lld/COFF/Driver.cpp | 10 +- lld/test/COFF/timestamp.test | 18 ++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index e0afb6b18805b2..22ee2f133be98a 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1825,7 +1825,15 @@ void LinkerDriver::linkerMain(ArrayRef argsArr) { } } else { config->repro = false; -config->timestamp = time(nullptr); +if (std::optional epoch = +Process::GetEnv("SOURCE_DATE_EPOCH")) { + StringRef value(*epoch); + if (value.getAsInteger(0, config->timestamp)) +fatal(Twine("invalid SOURCE_DATE_EPOCH timestamp: ") + value + + ". Expected 32-bit integer"); +} else { + config->timestamp = time(nullptr); +} } // Handle /alternatename diff --git a/lld/test/COFF/timestamp.test b/lld/test/COFF/timestamp.test index fbdc5788a33a55..c0658d6109811b 100644 --- a/lld/test/COFF/timestamp.test +++ b/lld/test/COFF/timestamp.test @@ -3,9 +3,19 @@ RUN: yaml2obj %p/Inputs/generic.yaml -o %t.obj RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.1.exe RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.2.exe RUN: lld-link %t.obj /debug /timestamp:0 /entry:main /nodefaultlib /out:%t.3.exe +RUN: env SOURCE_DATE_EPOCH=0 lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.4.exe +RUN: lld-link %t.obj /debug /timestamp:4294967295 /entry:main /nodefaultlib /out:%t.5.exe +RUN: env SOURCE_DATE_EPOCH=4294967295 lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.6.exe +RUN: env SOURCE_DATE_EPOCH=12345 lld-link %t.obj /debug /timestamp:0 /entry:main /nodefaultlib /out:%t.7.exe +RUN: env LLD_IN_TEST=1 not lld-link %t.obj /debug /timestamp:4294967296 /entry:main /nodefaultlib /out:%t.8.exe 2>&1 | FileCheck %s --check-prefix=ERROR +RUN: env SOURCE_DATE_EPOCH=4294967296 env LLD_IN_TEST=1 not lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.9.exe 2>&1 | FileCheck %s --check-prefix=ERROR2 RUN: llvm-readobj --file-headers --coff-debug-directory %t.1.exe | FileCheck %s --check-prefix=HASH RUN: llvm-readobj --file-headers --coff-debug-directory %t.2.exe | FileCheck %s --check-prefix=HASH RUN: llvm-readobj --file-headers --coff-debug-directory %t.3.exe | FileCheck %s --check-prefix=ZERO +RUN: llvm-readobj --file-headers --coff-debug-directory %t.4.exe | FileCheck %s --check-prefix=ZERO +RUN: llvm-readobj --file-headers --coff-debug-directory %t.5.exe | FileCheck %s --check-prefix=MAX +RUN: llvm-readobj --file-headers --coff-debug-directory %t.6.exe | FileCheck %s --check-prefix=MAX +RUN: llvm-readobj --file-headers --coff-debug-directory %t.7.exe | FileCheck %s --check-prefix=ZERO HASH: ImageFileHeader { HASH: TimeDateStamp: [[STAMP:.*]] @@ -16,3 +26,11 @@ ZERO: ImageFileHeader { ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0) ZERO: DebugDirectory [ ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0) + +MAX: ImageFileHeader { +MAX: TimeDateStamp: 2106-02-07 06:28:15 (0x) +MAX: DebugDirectory [ +MAX: TimeDateStamp: 2106-02-07 06:28:15 (0x) + +ERROR: error: invalid timestamp: 4294967296. Expected 32-bit integer +ERROR2: error: invalid SOURCE_DATE_EPOCH timestamp: 4294967296. Expected 32-bit integer ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] release/18.x: [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) (PR #81384)
llvmbot wrote: @MaskRay What do you think about merging this PR to the release branch? https://github.com/llvm/llvm-project/pull/81384 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] release/18.x: [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) (PR #81384)
llvmbot wrote: @llvm/pr-subscribers-lld Author: None (llvmbot) Changes Backport 0df8aed6c30f08ded526038a6bbb4daf113a31c1 Requested by: @mstorsjo --- Full diff: https://github.com/llvm/llvm-project/pull/81384.diff 2 Files Affected: - (modified) lld/COFF/Driver.cpp (+9-1) - (modified) lld/test/COFF/timestamp.test (+18) ``diff diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index e0afb6b18805b2..22ee2f133be98a 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1825,7 +1825,15 @@ void LinkerDriver::linkerMain(ArrayRef argsArr) { } } else { config->repro = false; -config->timestamp = time(nullptr); +if (std::optional epoch = +Process::GetEnv("SOURCE_DATE_EPOCH")) { + StringRef value(*epoch); + if (value.getAsInteger(0, config->timestamp)) +fatal(Twine("invalid SOURCE_DATE_EPOCH timestamp: ") + value + + ". Expected 32-bit integer"); +} else { + config->timestamp = time(nullptr); +} } // Handle /alternatename diff --git a/lld/test/COFF/timestamp.test b/lld/test/COFF/timestamp.test index fbdc5788a33a55..c0658d6109811b 100644 --- a/lld/test/COFF/timestamp.test +++ b/lld/test/COFF/timestamp.test @@ -3,9 +3,19 @@ RUN: yaml2obj %p/Inputs/generic.yaml -o %t.obj RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.1.exe RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.2.exe RUN: lld-link %t.obj /debug /timestamp:0 /entry:main /nodefaultlib /out:%t.3.exe +RUN: env SOURCE_DATE_EPOCH=0 lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.4.exe +RUN: lld-link %t.obj /debug /timestamp:4294967295 /entry:main /nodefaultlib /out:%t.5.exe +RUN: env SOURCE_DATE_EPOCH=4294967295 lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.6.exe +RUN: env SOURCE_DATE_EPOCH=12345 lld-link %t.obj /debug /timestamp:0 /entry:main /nodefaultlib /out:%t.7.exe +RUN: env LLD_IN_TEST=1 not lld-link %t.obj /debug /timestamp:4294967296 /entry:main /nodefaultlib /out:%t.8.exe 2>&1 | FileCheck %s --check-prefix=ERROR +RUN: env SOURCE_DATE_EPOCH=4294967296 env LLD_IN_TEST=1 not lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.9.exe 2>&1 | FileCheck %s --check-prefix=ERROR2 RUN: llvm-readobj --file-headers --coff-debug-directory %t.1.exe | FileCheck %s --check-prefix=HASH RUN: llvm-readobj --file-headers --coff-debug-directory %t.2.exe | FileCheck %s --check-prefix=HASH RUN: llvm-readobj --file-headers --coff-debug-directory %t.3.exe | FileCheck %s --check-prefix=ZERO +RUN: llvm-readobj --file-headers --coff-debug-directory %t.4.exe | FileCheck %s --check-prefix=ZERO +RUN: llvm-readobj --file-headers --coff-debug-directory %t.5.exe | FileCheck %s --check-prefix=MAX +RUN: llvm-readobj --file-headers --coff-debug-directory %t.6.exe | FileCheck %s --check-prefix=MAX +RUN: llvm-readobj --file-headers --coff-debug-directory %t.7.exe | FileCheck %s --check-prefix=ZERO HASH: ImageFileHeader { HASH: TimeDateStamp: [[STAMP:.*]] @@ -16,3 +26,11 @@ ZERO: ImageFileHeader { ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0) ZERO: DebugDirectory [ ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0) + +MAX: ImageFileHeader { +MAX: TimeDateStamp: 2106-02-07 06:28:15 (0x) +MAX: DebugDirectory [ +MAX: TimeDateStamp: 2106-02-07 06:28:15 (0x) + +ERROR: error: invalid timestamp: 4294967296. Expected 32-bit integer +ERROR2: error: invalid SOURCE_DATE_EPOCH timestamp: 4294967296. Expected 32-bit integer `` https://github.com/llvm/llvm-project/pull/81384 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] release/18.x: [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) (PR #81384)
https://github.com/MaskRay approved this pull request. https://github.com/llvm/llvm-project/pull/81384 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] [LLD] [docs] Add a release note for the SOURCE_DATE_EPOCH support (PR #81388)
https://github.com/mstorsjo created https://github.com/llvm/llvm-project/pull/81388 None From 4a6f8dbf3993e6a8687c0711f073bc79823727a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Sun, 11 Feb 2024 00:49:26 +0200 Subject: [PATCH] [LLD] [docs] Add a release note for the SOURCE_DATE_EPOCH support --- lld/docs/ReleaseNotes.rst | 5 + 1 file changed, 5 insertions(+) diff --git a/lld/docs/ReleaseNotes.rst b/lld/docs/ReleaseNotes.rst index fa0e7f2bc0b3ea..82f9d93b8e86ab 100644 --- a/lld/docs/ReleaseNotes.rst +++ b/lld/docs/ReleaseNotes.rst @@ -86,6 +86,11 @@ COFF Improvements * LLD now prefers library paths specified with ``-libpath:`` over the implicitly detected toolchain paths. +* Use the ``SOURCE_DATE_EPOCH`` environment variable for the PE header and + debug directory timestamps, if neither the ``/Brepro`` nor ``/timestamp:`` + options have been specified. This makes the linker output reproducible by + setting this environment variable. + MinGW Improvements -- ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] [LLD] [docs] Add a release note for the SOURCE_DATE_EPOCH support (PR #81388)
https://github.com/mstorsjo milestoned https://github.com/llvm/llvm-project/pull/81388 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] [LLD] [docs] Add a release note for the SOURCE_DATE_EPOCH support (PR #81388)
llvmbot wrote: @llvm/pr-subscribers-lld Author: Martin Storsjö (mstorsjo) Changes --- Full diff: https://github.com/llvm/llvm-project/pull/81388.diff 1 Files Affected: - (modified) lld/docs/ReleaseNotes.rst (+5) ``diff diff --git a/lld/docs/ReleaseNotes.rst b/lld/docs/ReleaseNotes.rst index fa0e7f2bc0b3ea..82f9d93b8e86ab 100644 --- a/lld/docs/ReleaseNotes.rst +++ b/lld/docs/ReleaseNotes.rst @@ -86,6 +86,11 @@ COFF Improvements * LLD now prefers library paths specified with ``-libpath:`` over the implicitly detected toolchain paths. +* Use the ``SOURCE_DATE_EPOCH`` environment variable for the PE header and + debug directory timestamps, if neither the ``/Brepro`` nor ``/timestamp:`` + options have been specified. This makes the linker output reproducible by + setting this environment variable. + MinGW Improvements -- `` https://github.com/llvm/llvm-project/pull/81388 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] [LLD] [docs] Add a release note for the SOURCE_DATE_EPOCH support (PR #81388)
mstorsjo wrote: This goes along with/after #81384 (which is approved but not yet merged). https://github.com/llvm/llvm-project/pull/81388 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] release/18.x: [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) (PR #81384)
https://github.com/llvmbot updated https://github.com/llvm/llvm-project/pull/81384 >From 48ae424d6bcaea4481c71fd809caf0d2a6a9a93a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Sat, 10 Feb 2024 23:57:12 +0200 Subject: [PATCH] [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) The SOURCE_DATE_EPOCH environment variable can be set in order to get reproducible build. When linking PE/COFF modules with LLD, the timestamp field is set to the current time, unless either the /timestamp: or /Brepro option is set. If neither of them is set, check the SOURCE_DATE_EPOCH variable, before resorting to using the actual current date and time. See https://reproducible-builds.org/docs/source-date-epoch/ for reference on the use of this variable. (cherry picked from commit 0df8aed6c30f08ded526038a6bbb4daf113a31c1) --- lld/COFF/Driver.cpp | 10 +- lld/test/COFF/timestamp.test | 18 ++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index e0afb6b18805b2..22ee2f133be98a 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1825,7 +1825,15 @@ void LinkerDriver::linkerMain(ArrayRef argsArr) { } } else { config->repro = false; -config->timestamp = time(nullptr); +if (std::optional epoch = +Process::GetEnv("SOURCE_DATE_EPOCH")) { + StringRef value(*epoch); + if (value.getAsInteger(0, config->timestamp)) +fatal(Twine("invalid SOURCE_DATE_EPOCH timestamp: ") + value + + ". Expected 32-bit integer"); +} else { + config->timestamp = time(nullptr); +} } // Handle /alternatename diff --git a/lld/test/COFF/timestamp.test b/lld/test/COFF/timestamp.test index fbdc5788a33a55..c0658d6109811b 100644 --- a/lld/test/COFF/timestamp.test +++ b/lld/test/COFF/timestamp.test @@ -3,9 +3,19 @@ RUN: yaml2obj %p/Inputs/generic.yaml -o %t.obj RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.1.exe RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.2.exe RUN: lld-link %t.obj /debug /timestamp:0 /entry:main /nodefaultlib /out:%t.3.exe +RUN: env SOURCE_DATE_EPOCH=0 lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.4.exe +RUN: lld-link %t.obj /debug /timestamp:4294967295 /entry:main /nodefaultlib /out:%t.5.exe +RUN: env SOURCE_DATE_EPOCH=4294967295 lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.6.exe +RUN: env SOURCE_DATE_EPOCH=12345 lld-link %t.obj /debug /timestamp:0 /entry:main /nodefaultlib /out:%t.7.exe +RUN: env LLD_IN_TEST=1 not lld-link %t.obj /debug /timestamp:4294967296 /entry:main /nodefaultlib /out:%t.8.exe 2>&1 | FileCheck %s --check-prefix=ERROR +RUN: env SOURCE_DATE_EPOCH=4294967296 env LLD_IN_TEST=1 not lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.9.exe 2>&1 | FileCheck %s --check-prefix=ERROR2 RUN: llvm-readobj --file-headers --coff-debug-directory %t.1.exe | FileCheck %s --check-prefix=HASH RUN: llvm-readobj --file-headers --coff-debug-directory %t.2.exe | FileCheck %s --check-prefix=HASH RUN: llvm-readobj --file-headers --coff-debug-directory %t.3.exe | FileCheck %s --check-prefix=ZERO +RUN: llvm-readobj --file-headers --coff-debug-directory %t.4.exe | FileCheck %s --check-prefix=ZERO +RUN: llvm-readobj --file-headers --coff-debug-directory %t.5.exe | FileCheck %s --check-prefix=MAX +RUN: llvm-readobj --file-headers --coff-debug-directory %t.6.exe | FileCheck %s --check-prefix=MAX +RUN: llvm-readobj --file-headers --coff-debug-directory %t.7.exe | FileCheck %s --check-prefix=ZERO HASH: ImageFileHeader { HASH: TimeDateStamp: [[STAMP:.*]] @@ -16,3 +26,11 @@ ZERO: ImageFileHeader { ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0) ZERO: DebugDirectory [ ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0) + +MAX: ImageFileHeader { +MAX: TimeDateStamp: 2106-02-07 06:28:15 (0x) +MAX: DebugDirectory [ +MAX: TimeDateStamp: 2106-02-07 06:28:15 (0x) + +ERROR: error: invalid timestamp: 4294967296. Expected 32-bit integer +ERROR2: error: invalid SOURCE_DATE_EPOCH timestamp: 4294967296. Expected 32-bit integer ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [libcxx] 91cb452 - [libc++][modules] Fix disabling Unicode (#81294)
Author: Po-yao Chang Date: 2024-02-10T15:55:03Z New Revision: 91cb452c3cd1e527dd74ece20a83b9fb2ffa6f5c URL: https://github.com/llvm/llvm-project/commit/91cb452c3cd1e527dd74ece20a83b9fb2ffa6f5c DIFF: https://github.com/llvm/llvm-project/commit/91cb452c3cd1e527dd74ece20a83b9fb2ffa6f5c.diff LOG: [libc++][modules] Fix disabling Unicode (#81294) -DLIBCXX_ENABLE_UNICODE=OFF or -D_LIBCPP_HAS_NO_UNICODE doesn't build without this change. (cherry picked from commit 30cd1838dc334775f7a29f57b581f2bdda3f0ea1) Added: Modified: libcxx/modules/std/ostream.inc Removed: diff --git a/libcxx/modules/std/ostream.inc b/libcxx/modules/std/ostream.inc index 8fcbfb4bdc1828..0e0e2d54fe6bae 100644 --- a/libcxx/modules/std/ostream.inc +++ b/libcxx/modules/std/ostream.inc @@ -33,8 +33,10 @@ export namespace std { using std::println; using std::vprint_nonunicode; +#ifndef _LIBCPP_HAS_NO_UNICODE using std::vprint_unicode; -# endif // _LIBCPP_STD_VER >= 23 +#endif // _LIBCPP_HAS_NO_UNICODE +# endif // _LIBCPP_STD_VER >= 23 #endif // _LIBCPP_HAS_NO_LOCALIZATION } // namespace std ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [libcxx] release/18.x: [libc++][modules] Fix disabling Unicode (#81294) (PR #81361)
https://github.com/tstellar closed https://github.com/llvm/llvm-project/pull/81361 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [mlir] release/18.x: [mlir] Skip invalid test on big endian platform (s390x) (#80246) (PR #81373)
https://github.com/llvmbot updated https://github.com/llvm/llvm-project/pull/81373 >From ab6dd5986ab17ad2a9b2ea65e0ebf027e198343c Mon Sep 17 00:00:00 2001 From: Kai Sasaki Date: Fri, 2 Feb 2024 17:07:44 +0900 Subject: [PATCH] [mlir] Skip invalid test on big endian platform (s390x) (#80246) The buildbot test running on s390x platform keeps failing since [this time](https://lab.llvm.org/buildbot/#/builders/199/builds/31136). This is because of the dependency on the endianness of the platform. It expects the format invalid in the big endian platform (s390x). We can simply skip it. See: https://discourse.llvm.org/t/mlir-s390x-linux-failure/76695 (cherry picked from commit 65ac8c16e028b23b49fd6b03817faa1ab6c0229d) --- .../Target/LLVMIR/llvmir-le-specific.mlir | 27 +++ mlir/test/Target/LLVMIR/llvmir.mlir | 23 2 files changed, 27 insertions(+), 23 deletions(-) create mode 100644 mlir/test/Target/LLVMIR/llvmir-le-specific.mlir diff --git a/mlir/test/Target/LLVMIR/llvmir-le-specific.mlir b/mlir/test/Target/LLVMIR/llvmir-le-specific.mlir new file mode 100644 index 00..f8d082082117cb --- /dev/null +++ b/mlir/test/Target/LLVMIR/llvmir-le-specific.mlir @@ -0,0 +1,27 @@ +// RUN: mlir-translate -mlir-to-llvmir -split-input-file %s | FileCheck %s + +// Decoding the attribute does not work on big-endian platforms currently +// XFAIL: target=s390x-{{.*}} + +// CHECK{LITERAL}: @dense_resource_tensor_constant = internal constant [5 x float] [float 0x3FCA03408000, float 0xBFD04663, float 0xBFD75DDF8000, float 0xBFDE074F4000, float 0x3FDDD3A1C000] +llvm.mlir.global internal constant @dense_resource_tensor_constant(dense_resource : tensor<5xf32>) : !llvm.array<5 x f32> + +// CHECK{LITERAL}: @dense_resource_vector_constant = internal constant <5 x float> +llvm.mlir.global internal constant @dense_resource_vector_constant(dense_resource : vector<5xf32>) : vector<5xf32> + + +// CHECK{LITERAL}: @dense_resource_multidim_tensor_constant = internal constant [1 x [2 x [2 x float]]] [[2 x [2 x float]] [[2 x float] [float 0x3FD6B46A8000, float 0x3FD6781AC000], [2 x float] [float 0xBFB45A2AA000, float 0x3FD77A5CA000]]] +llvm.mlir.global internal constant @dense_resource_multidim_tensor_constant(dense_resource : tensor<1x2x2xf32>) : !llvm.array<1 x !llvm.array<2 x !llvm.array<2 x f32>>> + +// CHECK{LITERAL}: @dense_resource_multidim_vector_constant = internal constant [1 x [2 x <2 x float>]] [[2 x <2 x float>] [<2 x float> , <2 x float> ]] +llvm.mlir.global internal constant @dense_resource_multidim_vector_constant(dense_resource : vector<1x2x2xf32>) : !llvm.array<1 x !llvm.array<2 x vector<2 x f32>>> + +// Resources are kept at end of file. New tests should be added above this. +{-# + dialect_resources: { +builtin: { + dense_resource_test_5xf32: "0x0800041A503E183382BEFCEEBABE7A3AF0BE0E9DEE3E", + dense_resource_test_2x2xf32: "0x080054A3B53ED6C0B33E55D1A2BDE5D2BB3E" +} + } +#-} \ No newline at end of file diff --git a/mlir/test/Target/LLVMIR/llvmir.mlir b/mlir/test/Target/LLVMIR/llvmir.mlir index 448aa3a5d85d79..961c9484446845 100644 --- a/mlir/test/Target/LLVMIR/llvmir.mlir +++ b/mlir/test/Target/LLVMIR/llvmir.mlir @@ -101,19 +101,6 @@ llvm.mlir.global internal @dense_float_vector_3d(dense<[[[1.0, 2.0], [3.0, 4.0]] // CHECK{LITERAL}: @splat_float_vector_3d = internal global [2 x [2 x <2 x float>]] [[2 x <2 x float>] [<2 x float> , <2 x float> ], [2 x <2 x float>] [<2 x float> , <2 x float> ]] llvm.mlir.global internal @splat_float_vector_3d(dense<42.0> : vector<2x2x2xf32>) : !llvm.array<2 x !llvm.array<2 x vector<2xf32>>> -// CHECK{LITERAL}: @dense_resource_tensor_constant = internal constant [5 x float] [float 0x3FCA03408000, float 0xBFD04663, float 0xBFD75DDF8000, float 0xBFDE074F4000, float 0x3FDDD3A1C000] -llvm.mlir.global internal constant @dense_resource_tensor_constant(dense_resource : tensor<5xf32>) : !llvm.array<5 x f32> - -// CHECK{LITERAL}: @dense_resource_vector_constant = internal constant <5 x float> -llvm.mlir.global internal constant @dense_resource_vector_constant(dense_resource : vector<5xf32>) : vector<5xf32> - - -// CHECK{LITERAL}: @dense_resource_multidim_tensor_constant = internal constant [1 x [2 x [2 x float]]] [[2 x [2 x float]] [[2 x float] [float 0x3FD6B46A8000, float 0x3FD6781AC000], [2 x float] [float 0xBFB45A2AA000, float 0x3FD77A5CA000]]] -llvm.mlir.global internal constant @dense_resource_multidim_tensor_constant(dense_resource : tensor<1x2x2xf32>) : !llvm.array<1 x !llvm.array<2 x !llvm.array<2 x f32>>> - -// CHECK{LITERAL}: @dense_resource_multidim_vector_constant = internal constant [1 x [2 x <2 x float>]] [[2 x <2 x float>] [<2 x float> , <2 x float> ]] -llvm.mlir.global internal constant @dense_resource_multidim_vector_constant(dense_resource : vector<1x2x2xf32>) : !llvm.array<1 x !ll
[llvm-branch-commits] [lld] release/18.x: [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) (PR #81384)
https://github.com/llvmbot updated https://github.com/llvm/llvm-project/pull/81384 >From 0d656f0f12d447ac0e197618a0d25495d66388d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Sat, 10 Feb 2024 23:57:12 +0200 Subject: [PATCH] [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) The SOURCE_DATE_EPOCH environment variable can be set in order to get reproducible build. When linking PE/COFF modules with LLD, the timestamp field is set to the current time, unless either the /timestamp: or /Brepro option is set. If neither of them is set, check the SOURCE_DATE_EPOCH variable, before resorting to using the actual current date and time. See https://reproducible-builds.org/docs/source-date-epoch/ for reference on the use of this variable. (cherry picked from commit 0df8aed6c30f08ded526038a6bbb4daf113a31c1) --- lld/COFF/Driver.cpp | 10 +- lld/test/COFF/timestamp.test | 18 ++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index e0afb6b18805b2..22ee2f133be98a 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1825,7 +1825,15 @@ void LinkerDriver::linkerMain(ArrayRef argsArr) { } } else { config->repro = false; -config->timestamp = time(nullptr); +if (std::optional epoch = +Process::GetEnv("SOURCE_DATE_EPOCH")) { + StringRef value(*epoch); + if (value.getAsInteger(0, config->timestamp)) +fatal(Twine("invalid SOURCE_DATE_EPOCH timestamp: ") + value + + ". Expected 32-bit integer"); +} else { + config->timestamp = time(nullptr); +} } // Handle /alternatename diff --git a/lld/test/COFF/timestamp.test b/lld/test/COFF/timestamp.test index fbdc5788a33a55..c0658d6109811b 100644 --- a/lld/test/COFF/timestamp.test +++ b/lld/test/COFF/timestamp.test @@ -3,9 +3,19 @@ RUN: yaml2obj %p/Inputs/generic.yaml -o %t.obj RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.1.exe RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.2.exe RUN: lld-link %t.obj /debug /timestamp:0 /entry:main /nodefaultlib /out:%t.3.exe +RUN: env SOURCE_DATE_EPOCH=0 lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.4.exe +RUN: lld-link %t.obj /debug /timestamp:4294967295 /entry:main /nodefaultlib /out:%t.5.exe +RUN: env SOURCE_DATE_EPOCH=4294967295 lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.6.exe +RUN: env SOURCE_DATE_EPOCH=12345 lld-link %t.obj /debug /timestamp:0 /entry:main /nodefaultlib /out:%t.7.exe +RUN: env LLD_IN_TEST=1 not lld-link %t.obj /debug /timestamp:4294967296 /entry:main /nodefaultlib /out:%t.8.exe 2>&1 | FileCheck %s --check-prefix=ERROR +RUN: env SOURCE_DATE_EPOCH=4294967296 env LLD_IN_TEST=1 not lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.9.exe 2>&1 | FileCheck %s --check-prefix=ERROR2 RUN: llvm-readobj --file-headers --coff-debug-directory %t.1.exe | FileCheck %s --check-prefix=HASH RUN: llvm-readobj --file-headers --coff-debug-directory %t.2.exe | FileCheck %s --check-prefix=HASH RUN: llvm-readobj --file-headers --coff-debug-directory %t.3.exe | FileCheck %s --check-prefix=ZERO +RUN: llvm-readobj --file-headers --coff-debug-directory %t.4.exe | FileCheck %s --check-prefix=ZERO +RUN: llvm-readobj --file-headers --coff-debug-directory %t.5.exe | FileCheck %s --check-prefix=MAX +RUN: llvm-readobj --file-headers --coff-debug-directory %t.6.exe | FileCheck %s --check-prefix=MAX +RUN: llvm-readobj --file-headers --coff-debug-directory %t.7.exe | FileCheck %s --check-prefix=ZERO HASH: ImageFileHeader { HASH: TimeDateStamp: [[STAMP:.*]] @@ -16,3 +26,11 @@ ZERO: ImageFileHeader { ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0) ZERO: DebugDirectory [ ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0) + +MAX: ImageFileHeader { +MAX: TimeDateStamp: 2106-02-07 06:28:15 (0x) +MAX: DebugDirectory [ +MAX: TimeDateStamp: 2106-02-07 06:28:15 (0x) + +ERROR: error: invalid timestamp: 4294967296. Expected 32-bit integer +ERROR2: error: invalid SOURCE_DATE_EPOCH timestamp: 4294967296. Expected 32-bit integer ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] 0d656f0 - [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326)
Author: Martin Storsjö Date: 2024-02-10T17:48:47-08:00 New Revision: 0d656f0f12d447ac0e197618a0d25495d66388d1 URL: https://github.com/llvm/llvm-project/commit/0d656f0f12d447ac0e197618a0d25495d66388d1 DIFF: https://github.com/llvm/llvm-project/commit/0d656f0f12d447ac0e197618a0d25495d66388d1.diff LOG: [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) The SOURCE_DATE_EPOCH environment variable can be set in order to get reproducible build. When linking PE/COFF modules with LLD, the timestamp field is set to the current time, unless either the /timestamp: or /Brepro option is set. If neither of them is set, check the SOURCE_DATE_EPOCH variable, before resorting to using the actual current date and time. See https://reproducible-builds.org/docs/source-date-epoch/ for reference on the use of this variable. (cherry picked from commit 0df8aed6c30f08ded526038a6bbb4daf113a31c1) Added: Modified: lld/COFF/Driver.cpp lld/test/COFF/timestamp.test Removed: diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index e0afb6b18805b2..22ee2f133be98a 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1825,7 +1825,15 @@ void LinkerDriver::linkerMain(ArrayRef argsArr) { } } else { config->repro = false; -config->timestamp = time(nullptr); +if (std::optional epoch = +Process::GetEnv("SOURCE_DATE_EPOCH")) { + StringRef value(*epoch); + if (value.getAsInteger(0, config->timestamp)) +fatal(Twine("invalid SOURCE_DATE_EPOCH timestamp: ") + value + + ". Expected 32-bit integer"); +} else { + config->timestamp = time(nullptr); +} } // Handle /alternatename diff --git a/lld/test/COFF/timestamp.test b/lld/test/COFF/timestamp.test index fbdc5788a33a55..c0658d6109811b 100644 --- a/lld/test/COFF/timestamp.test +++ b/lld/test/COFF/timestamp.test @@ -3,9 +3,19 @@ RUN: yaml2obj %p/Inputs/generic.yaml -o %t.obj RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.1.exe RUN: lld-link %t.obj /debug /Brepro /entry:main /nodefaultlib /out:%t.2.exe RUN: lld-link %t.obj /debug /timestamp:0 /entry:main /nodefaultlib /out:%t.3.exe +RUN: env SOURCE_DATE_EPOCH=0 lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.4.exe +RUN: lld-link %t.obj /debug /timestamp:4294967295 /entry:main /nodefaultlib /out:%t.5.exe +RUN: env SOURCE_DATE_EPOCH=4294967295 lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.6.exe +RUN: env SOURCE_DATE_EPOCH=12345 lld-link %t.obj /debug /timestamp:0 /entry:main /nodefaultlib /out:%t.7.exe +RUN: env LLD_IN_TEST=1 not lld-link %t.obj /debug /timestamp:4294967296 /entry:main /nodefaultlib /out:%t.8.exe 2>&1 | FileCheck %s --check-prefix=ERROR +RUN: env SOURCE_DATE_EPOCH=4294967296 env LLD_IN_TEST=1 not lld-link %t.obj /debug /entry:main /nodefaultlib /out:%t.9.exe 2>&1 | FileCheck %s --check-prefix=ERROR2 RUN: llvm-readobj --file-headers --coff-debug-directory %t.1.exe | FileCheck %s --check-prefix=HASH RUN: llvm-readobj --file-headers --coff-debug-directory %t.2.exe | FileCheck %s --check-prefix=HASH RUN: llvm-readobj --file-headers --coff-debug-directory %t.3.exe | FileCheck %s --check-prefix=ZERO +RUN: llvm-readobj --file-headers --coff-debug-directory %t.4.exe | FileCheck %s --check-prefix=ZERO +RUN: llvm-readobj --file-headers --coff-debug-directory %t.5.exe | FileCheck %s --check-prefix=MAX +RUN: llvm-readobj --file-headers --coff-debug-directory %t.6.exe | FileCheck %s --check-prefix=MAX +RUN: llvm-readobj --file-headers --coff-debug-directory %t.7.exe | FileCheck %s --check-prefix=ZERO HASH: ImageFileHeader { HASH: TimeDateStamp: [[STAMP:.*]] @@ -16,3 +26,11 @@ ZERO: ImageFileHeader { ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0) ZERO: DebugDirectory [ ZERO: TimeDateStamp: 1970-01-01 00:00:00 (0x0) + +MAX: ImageFileHeader { +MAX: TimeDateStamp: 2106-02-07 06:28:15 (0x) +MAX: DebugDirectory [ +MAX: TimeDateStamp: 2106-02-07 06:28:15 (0x) + +ERROR: error: invalid timestamp: 4294967296. Expected 32-bit integer +ERROR2: error: invalid SOURCE_DATE_EPOCH timestamp: 4294967296. Expected 32-bit integer ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] release/18.x: [LLD] [COFF] Pick timestamps from the SOURCE_DATE_EPOCH variable (#81326) (PR #81384)
https://github.com/tstellar closed https://github.com/llvm/llvm-project/pull/81384 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [clang] [llvm] release/18.x: [SPARC] Support reserving arbitrary general purpose registers (#74927) (PR #81397)
https://github.com/llvmbot milestoned https://github.com/llvm/llvm-project/pull/81397 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [clang] [llvm] release/18.x: [SPARC] Support reserving arbitrary general purpose registers (#74927) (PR #81397)
https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/81397 Backport c2f9885a8aa3a820eefdacccf3fcc6b9d87e3284 Requested by: @brad0 >From 36358415208b11f955cdf3df1d51234617df6448 Mon Sep 17 00:00:00 2001 From: Koakuma Date: Sun, 11 Feb 2024 14:04:18 +0700 Subject: [PATCH] [SPARC] Support reserving arbitrary general purpose registers (#74927) This adds support for marking arbitrary general purpose registers - except for those with special purpose (G0, I6-I7, O6-O7) - as reserved, as needed by some software like the Linux kernel. (cherry picked from commit c2f9885a8aa3a820eefdacccf3fcc6b9d87e3284) --- clang/include/clang/Driver/Options.td | 12 ++ clang/lib/Driver/ToolChains/Arch/Sparc.cpp| 81 clang/test/Driver/sparc-fixed-register.c | 181 ++ llvm/lib/Target/Sparc/Sparc.td| 14 ++ llvm/lib/Target/Sparc/SparcISelLowering.cpp | 43 + llvm/lib/Target/Sparc/SparcRegisterInfo.cpp | 14 +- llvm/lib/Target/Sparc/SparcRegisterInfo.h | 1 + llvm/lib/Target/Sparc/SparcRegisterInfo.td| 4 + llvm/lib/Target/Sparc/SparcSubtarget.cpp | 1 + llvm/lib/Target/Sparc/SparcSubtarget.h| 10 + llvm/test/CodeGen/SPARC/reserved-arg-regs.ll | 25 +++ .../test/CodeGen/SPARC/reserved-regs-named.ll | 13 ++ .../SPARC/reserved-regs-unavailable.ll| 14 ++ llvm/test/CodeGen/SPARC/reserved-regs.ll | 17 ++ 14 files changed, 428 insertions(+), 2 deletions(-) create mode 100644 clang/test/Driver/sparc-fixed-register.c create mode 100644 llvm/test/CodeGen/SPARC/reserved-arg-regs.ll create mode 100644 llvm/test/CodeGen/SPARC/reserved-regs-named.ll create mode 100644 llvm/test/CodeGen/SPARC/reserved-regs-unavailable.ll diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index e8d03fc2690235..175bedbfb4d01c 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5815,6 +5815,18 @@ def mvis3 : Flag<["-"], "mvis3">, Group; def mno_vis3 : Flag<["-"], "mno-vis3">, Group; def mhard_quad_float : Flag<["-"], "mhard-quad-float">, Group; def msoft_quad_float : Flag<["-"], "msoft-quad-float">, Group; +foreach i = 1 ... 7 in + def ffixed_g#i : Flag<["-"], "ffixed-g"#i>, Group, +HelpText<"Reserve the G"#i#" register (SPARC only)">; +foreach i = 0 ... 5 in + def ffixed_o#i : Flag<["-"], "ffixed-o"#i>, Group, +HelpText<"Reserve the O"#i#" register (SPARC only)">; +foreach i = 0 ... 7 in + def ffixed_l#i : Flag<["-"], "ffixed-l"#i>, Group, +HelpText<"Reserve the L"#i#" register (SPARC only)">; +foreach i = 0 ... 5 in + def ffixed_i#i : Flag<["-"], "ffixed-i"#i>, Group, +HelpText<"Reserve the I"#i#" register (SPARC only)">; } // let Flags = [TargetSpecific] // M68k features flags diff --git a/clang/lib/Driver/ToolChains/Arch/Sparc.cpp b/clang/lib/Driver/ToolChains/Arch/Sparc.cpp index 22e583021515e5..ae1a4ba7882627 100644 --- a/clang/lib/Driver/ToolChains/Arch/Sparc.cpp +++ b/clang/lib/Driver/ToolChains/Arch/Sparc.cpp @@ -178,4 +178,85 @@ void sparc::getSparcTargetFeatures(const Driver &D, const ArgList &Args, else Features.push_back("-hard-quad-float"); } + + if (Args.hasArg(options::OPT_ffixed_g1)) +Features.push_back("+reserve-g1"); + + if (Args.hasArg(options::OPT_ffixed_g2)) +Features.push_back("+reserve-g2"); + + if (Args.hasArg(options::OPT_ffixed_g3)) +Features.push_back("+reserve-g3"); + + if (Args.hasArg(options::OPT_ffixed_g4)) +Features.push_back("+reserve-g4"); + + if (Args.hasArg(options::OPT_ffixed_g5)) +Features.push_back("+reserve-g5"); + + if (Args.hasArg(options::OPT_ffixed_g6)) +Features.push_back("+reserve-g6"); + + if (Args.hasArg(options::OPT_ffixed_g7)) +Features.push_back("+reserve-g7"); + + if (Args.hasArg(options::OPT_ffixed_o0)) +Features.push_back("+reserve-o0"); + + if (Args.hasArg(options::OPT_ffixed_o1)) +Features.push_back("+reserve-o1"); + + if (Args.hasArg(options::OPT_ffixed_o2)) +Features.push_back("+reserve-o2"); + + if (Args.hasArg(options::OPT_ffixed_o3)) +Features.push_back("+reserve-o3"); + + if (Args.hasArg(options::OPT_ffixed_o4)) +Features.push_back("+reserve-o4"); + + if (Args.hasArg(options::OPT_ffixed_o5)) +Features.push_back("+reserve-o5"); + + if (Args.hasArg(options::OPT_ffixed_l0)) +Features.push_back("+reserve-l0"); + + if (Args.hasArg(options::OPT_ffixed_l1)) +Features.push_back("+reserve-l1"); + + if (Args.hasArg(options::OPT_ffixed_l2)) +Features.push_back("+reserve-l2"); + + if (Args.hasArg(options::OPT_ffixed_l3)) +Features.push_back("+reserve-l3"); + + if (Args.hasArg(options::OPT_ffixed_l4)) +Features.push_back("+reserve-l4"); + + if (Args.hasArg(options::OPT_ffixed_l5)) +Features.push_back("+reserve-l5"); + + if (Args.hasArg(options::OPT_ffixed_l6)) +Features.push_back("+reserve-l6"); + + if (Args.hasArg(options::OPT_ffix
[llvm-branch-commits] [clang] [llvm] release/18.x: [SPARC] Support reserving arbitrary general purpose registers (#74927) (PR #81397)
llvmbot wrote: @koachan What do you think about merging this PR to the release branch? https://github.com/llvm/llvm-project/pull/81397 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [clang] [llvm] release/18.x: [SPARC] Support reserving arbitrary general purpose registers (#74927) (PR #81397)
llvmbot wrote: @llvm/pr-subscribers-clang Author: None (llvmbot) Changes Backport c2f9885a8aa3a820eefdacccf3fcc6b9d87e3284 Requested by: @brad0 --- Patch is 26.12 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/81397.diff 14 Files Affected: - (modified) clang/include/clang/Driver/Options.td (+12) - (modified) clang/lib/Driver/ToolChains/Arch/Sparc.cpp (+81) - (added) clang/test/Driver/sparc-fixed-register.c (+181) - (modified) llvm/lib/Target/Sparc/Sparc.td (+14) - (modified) llvm/lib/Target/Sparc/SparcISelLowering.cpp (+43) - (modified) llvm/lib/Target/Sparc/SparcRegisterInfo.cpp (+12-2) - (modified) llvm/lib/Target/Sparc/SparcRegisterInfo.h (+1) - (modified) llvm/lib/Target/Sparc/SparcRegisterInfo.td (+4) - (modified) llvm/lib/Target/Sparc/SparcSubtarget.cpp (+1) - (modified) llvm/lib/Target/Sparc/SparcSubtarget.h (+10) - (added) llvm/test/CodeGen/SPARC/reserved-arg-regs.ll (+25) - (added) llvm/test/CodeGen/SPARC/reserved-regs-named.ll (+13) - (added) llvm/test/CodeGen/SPARC/reserved-regs-unavailable.ll (+14) - (modified) llvm/test/CodeGen/SPARC/reserved-regs.ll (+17) ``diff diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index e8d03fc2690235..175bedbfb4d01c 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5815,6 +5815,18 @@ def mvis3 : Flag<["-"], "mvis3">, Group; def mno_vis3 : Flag<["-"], "mno-vis3">, Group; def mhard_quad_float : Flag<["-"], "mhard-quad-float">, Group; def msoft_quad_float : Flag<["-"], "msoft-quad-float">, Group; +foreach i = 1 ... 7 in + def ffixed_g#i : Flag<["-"], "ffixed-g"#i>, Group, +HelpText<"Reserve the G"#i#" register (SPARC only)">; +foreach i = 0 ... 5 in + def ffixed_o#i : Flag<["-"], "ffixed-o"#i>, Group, +HelpText<"Reserve the O"#i#" register (SPARC only)">; +foreach i = 0 ... 7 in + def ffixed_l#i : Flag<["-"], "ffixed-l"#i>, Group, +HelpText<"Reserve the L"#i#" register (SPARC only)">; +foreach i = 0 ... 5 in + def ffixed_i#i : Flag<["-"], "ffixed-i"#i>, Group, +HelpText<"Reserve the I"#i#" register (SPARC only)">; } // let Flags = [TargetSpecific] // M68k features flags diff --git a/clang/lib/Driver/ToolChains/Arch/Sparc.cpp b/clang/lib/Driver/ToolChains/Arch/Sparc.cpp index 22e583021515e5..ae1a4ba7882627 100644 --- a/clang/lib/Driver/ToolChains/Arch/Sparc.cpp +++ b/clang/lib/Driver/ToolChains/Arch/Sparc.cpp @@ -178,4 +178,85 @@ void sparc::getSparcTargetFeatures(const Driver &D, const ArgList &Args, else Features.push_back("-hard-quad-float"); } + + if (Args.hasArg(options::OPT_ffixed_g1)) +Features.push_back("+reserve-g1"); + + if (Args.hasArg(options::OPT_ffixed_g2)) +Features.push_back("+reserve-g2"); + + if (Args.hasArg(options::OPT_ffixed_g3)) +Features.push_back("+reserve-g3"); + + if (Args.hasArg(options::OPT_ffixed_g4)) +Features.push_back("+reserve-g4"); + + if (Args.hasArg(options::OPT_ffixed_g5)) +Features.push_back("+reserve-g5"); + + if (Args.hasArg(options::OPT_ffixed_g6)) +Features.push_back("+reserve-g6"); + + if (Args.hasArg(options::OPT_ffixed_g7)) +Features.push_back("+reserve-g7"); + + if (Args.hasArg(options::OPT_ffixed_o0)) +Features.push_back("+reserve-o0"); + + if (Args.hasArg(options::OPT_ffixed_o1)) +Features.push_back("+reserve-o1"); + + if (Args.hasArg(options::OPT_ffixed_o2)) +Features.push_back("+reserve-o2"); + + if (Args.hasArg(options::OPT_ffixed_o3)) +Features.push_back("+reserve-o3"); + + if (Args.hasArg(options::OPT_ffixed_o4)) +Features.push_back("+reserve-o4"); + + if (Args.hasArg(options::OPT_ffixed_o5)) +Features.push_back("+reserve-o5"); + + if (Args.hasArg(options::OPT_ffixed_l0)) +Features.push_back("+reserve-l0"); + + if (Args.hasArg(options::OPT_ffixed_l1)) +Features.push_back("+reserve-l1"); + + if (Args.hasArg(options::OPT_ffixed_l2)) +Features.push_back("+reserve-l2"); + + if (Args.hasArg(options::OPT_ffixed_l3)) +Features.push_back("+reserve-l3"); + + if (Args.hasArg(options::OPT_ffixed_l4)) +Features.push_back("+reserve-l4"); + + if (Args.hasArg(options::OPT_ffixed_l5)) +Features.push_back("+reserve-l5"); + + if (Args.hasArg(options::OPT_ffixed_l6)) +Features.push_back("+reserve-l6"); + + if (Args.hasArg(options::OPT_ffixed_l7)) +Features.push_back("+reserve-l7"); + + if (Args.hasArg(options::OPT_ffixed_i0)) +Features.push_back("+reserve-i0"); + + if (Args.hasArg(options::OPT_ffixed_i1)) +Features.push_back("+reserve-i1"); + + if (Args.hasArg(options::OPT_ffixed_i2)) +Features.push_back("+reserve-i2"); + + if (Args.hasArg(options::OPT_ffixed_i3)) +Features.push_back("+reserve-i3"); + + if (Args.hasArg(options::OPT_ffixed_i4)) +Features.push_back("+reserve-i4"); + + if (Args.hasArg(options::OPT_ffixed_i5)) +Features.push_back("+reserve-i5"); } diff --git a/clang/t
[llvm-branch-commits] [mlir] release/18.x: [mlir] Skip invalid test on big endian platform (s390x) (#80246) (PR #81373)
https://github.com/Lewuathe approved this pull request. https://github.com/llvm/llvm-project/pull/81373 ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits