@@ -18,12 +18,12 @@ use rustc_hir::def_id::DefId;
18
18
use rustc_middle:: ty:: layout:: { LayoutError , LayoutOfHelpers , TyAndLayout } ;
19
19
use rustc_middle:: ty:: { self , Ty , TyCtxt } ;
20
20
use rustc_span:: Span ;
21
- use rustc_target:: abi:: { self , Align , Size } ;
21
+ use rustc_target:: abi:: { self , Align , Size , WrappingRange } ;
22
22
use rustc_target:: spec:: { HasTargetSpec , Target } ;
23
23
use std:: borrow:: Cow ;
24
24
use std:: ffi:: CStr ;
25
25
use std:: iter;
26
- use std:: ops:: { Deref , Range } ;
26
+ use std:: ops:: Deref ;
27
27
use std:: ptr;
28
28
use tracing:: debug;
29
29
@@ -382,7 +382,7 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
382
382
val
383
383
}
384
384
}
385
- fn to_immediate_scalar ( & mut self , val : Self :: Value , scalar : & abi:: Scalar ) -> Self :: Value {
385
+ fn to_immediate_scalar ( & mut self , val : Self :: Value , scalar : abi:: Scalar ) -> Self :: Value {
386
386
if scalar. is_bool ( ) {
387
387
return self . trunc ( val, self . cx ( ) . type_i1 ( ) ) ;
388
388
}
@@ -460,16 +460,15 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
460
460
fn scalar_load_metadata < ' a , ' ll , ' tcx > (
461
461
bx : & mut Builder < ' a , ' ll , ' tcx > ,
462
462
load : & ' ll Value ,
463
- scalar : & abi:: Scalar ,
463
+ scalar : abi:: Scalar ,
464
464
) {
465
465
match scalar. value {
466
466
abi:: Int ( ..) => {
467
- let range = scalar. valid_range_exclusive ( bx) ;
468
- if range. start != range. end {
469
- bx. range_metadata ( load, range) ;
467
+ if !scalar. is_always_valid ( bx) {
468
+ bx. range_metadata ( load, scalar. valid_range ) ;
470
469
}
471
470
}
472
- abi:: Pointer if !scalar. valid_range . contains_zero ( ) => {
471
+ abi:: Pointer if !scalar. valid_range . contains ( 0 ) => {
473
472
bx. nonnull_metadata ( load) ;
474
473
}
475
474
_ => { }
@@ -489,17 +488,17 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
489
488
}
490
489
let llval = const_llval. unwrap_or_else ( || {
491
490
let load = self . load ( place. layout . llvm_type ( self ) , place. llval , place. align ) ;
492
- if let abi:: Abi :: Scalar ( ref scalar) = place. layout . abi {
491
+ if let abi:: Abi :: Scalar ( scalar) = place. layout . abi {
493
492
scalar_load_metadata ( self , load, scalar) ;
494
493
}
495
494
load
496
495
} ) ;
497
496
OperandValue :: Immediate ( self . to_immediate ( llval, place. layout ) )
498
- } else if let abi:: Abi :: ScalarPair ( ref a , ref b) = place. layout . abi {
497
+ } else if let abi:: Abi :: ScalarPair ( a , b) = place. layout . abi {
499
498
let b_offset = a. value . size ( self ) . align_to ( b. value . align ( self ) . abi ) ;
500
499
let pair_ty = place. layout . llvm_type ( self ) ;
501
500
502
- let mut load = |i, scalar : & abi:: Scalar , align| {
501
+ let mut load = |i, scalar : abi:: Scalar , align| {
503
502
let llptr = self . struct_gep ( pair_ty, place. llval , i as u64 ) ;
504
503
let llty = place. layout . scalar_pair_element_llvm_type ( self , i, false ) ;
505
504
let load = self . load ( llty, llptr, align) ;
@@ -555,7 +554,7 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
555
554
next_bx
556
555
}
557
556
558
- fn range_metadata ( & mut self , load : & ' ll Value , range : Range < u128 > ) {
557
+ fn range_metadata ( & mut self , load : & ' ll Value , range : WrappingRange ) {
559
558
if self . sess ( ) . target . arch == "amdgpu" {
560
559
// amdgpu/LLVM does something weird and thinks an i64 value is
561
560
// split into a v2i32, halving the bitwidth LLVM expects,
@@ -568,7 +567,7 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
568
567
let llty = self . cx . val_ty ( load) ;
569
568
let v = [
570
569
self . cx . const_uint_big ( llty, range. start ) ,
571
- self . cx . const_uint_big ( llty, range. end ) ,
570
+ self . cx . const_uint_big ( llty, range. end . wrapping_add ( 1 ) ) ,
572
571
] ;
573
572
574
573
llvm:: LLVMSetMetadata (
0 commit comments