diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-06-07 23:55:28 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-07 23:55:28 +0200 |
| commit | 5870156d855564703353c48ed1d307dade31247c (patch) | |
| tree | 89e5b6844fb8c4b89d5cb1aee7507169c6a9fb16 /compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | |
| parent | 796c466cea55221d354e6f02d8da18880ce933b0 (diff) | |
| parent | 1c26dd0db4bb8b0613c19c14f7fcbb0d4fa22726 (diff) | |
| download | rust-5870156d855564703353c48ed1d307dade31247c.tar.gz rust-5870156d855564703353c48ed1d307dade31247c.zip | |
Rollup merge of #97840 - durin42:llvm-15-apint, r=nikic
RustWrapper: adapt to APInt API changes in LLVM 15 In https://reviews.llvm.org/D125556 upstream changed sext() and zext() to allow some no-op cases, which previously required use of the *OrSelf() methods, which I assume is what was going on here. The *OrSelf() methods got removed in https://reviews.llvm.org/D125559 after two weeks of deprecation because they came with some bonus (probably-undesired) behavior. Since the behavior of sext() and zext() changed slightly, I kept the old *OrSelf() calls in LLVM 14 and earlier, and only use the new version in LLVM 15. r? `@nikic`
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp')
| -rw-r--r-- | compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp index 6d79e662a42..f90bb7f2368 100644 --- a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp +++ b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp @@ -1542,11 +1542,19 @@ extern "C" bool LLVMRustConstInt128Get(LLVMValueRef CV, bool sext, uint64_t *hig auto C = unwrap<llvm::ConstantInt>(CV); if (C->getBitWidth() > 128) { return false; } APInt AP; +#if LLVM_VERSION_GE(15, 0) + if (sext) { + AP = C->getValue().sext(128); + } else { + AP = C->getValue().zext(128); + } +#else if (sext) { AP = C->getValue().sextOrSelf(128); } else { AP = C->getValue().zextOrSelf(128); } +#endif *low = AP.getLoBits(64).getZExtValue(); *high = AP.getHiBits(64).getZExtValue(); return true; |
