Add methods for checking for full ranges to Scalar
and WrappingRange
Move *_max methods back to util change to inline instead of inline(always) Remove valid_range_exclusive from scalar Use WrappingRange instead implement always_valid_for in a safer way Fix accidental edit
This commit is contained in:
parent
c5cbf7852a
commit
05cd48b008
7 changed files with 41 additions and 56 deletions
|
@ -18,12 +18,12 @@ use rustc_hir::def_id::DefId;
|
|||
use rustc_middle::ty::layout::{LayoutError, LayoutOfHelpers, TyAndLayout};
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||
use rustc_span::Span;
|
||||
use rustc_target::abi::{self, Align, Size};
|
||||
use rustc_target::abi::{self, Align, Size, WrappingRange};
|
||||
use rustc_target::spec::{HasTargetSpec, Target};
|
||||
use std::borrow::Cow;
|
||||
use std::ffi::CStr;
|
||||
use std::iter;
|
||||
use std::ops::{Deref, Range};
|
||||
use std::ops::Deref;
|
||||
use std::ptr;
|
||||
use tracing::debug;
|
||||
|
||||
|
@ -464,9 +464,8 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
) {
|
||||
match scalar.value {
|
||||
abi::Int(..) => {
|
||||
let range = scalar.valid_range_exclusive(bx);
|
||||
if range.start != range.end {
|
||||
bx.range_metadata(load, range);
|
||||
if !scalar.is_always_valid_for(bx) {
|
||||
bx.range_metadata(load, &scalar.valid_range);
|
||||
}
|
||||
}
|
||||
abi::Pointer if !scalar.valid_range.contains_zero() => {
|
||||
|
@ -555,7 +554,7 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
next_bx
|
||||
}
|
||||
|
||||
fn range_metadata(&mut self, load: &'ll Value, range: Range<u128>) {
|
||||
fn range_metadata(&mut self, load: &'ll Value, range: &WrappingRange) {
|
||||
if self.sess().target.arch == "amdgpu" {
|
||||
// amdgpu/LLVM does something weird and thinks an i64 value is
|
||||
// split into a v2i32, halving the bitwidth LLVM expects,
|
||||
|
@ -568,7 +567,7 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
let llty = self.cx.val_ty(load);
|
||||
let v = [
|
||||
self.cx.const_uint_big(llty, range.start),
|
||||
self.cx.const_uint_big(llty, range.end),
|
||||
self.cx.const_uint_big(llty, range.end.wrapping_add(1)),
|
||||
];
|
||||
|
||||
llvm::LLVMSetMetadata(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue