@@ -18,12 +18,12 @@ use rustc_hir::def_id::DefId;
1818use rustc_middle:: ty:: layout:: { LayoutError , LayoutOfHelpers , TyAndLayout } ;
1919use rustc_middle:: ty:: { self , Ty , TyCtxt } ;
2020use rustc_span:: Span ;
21- use rustc_target:: abi:: { self , Align , Size } ;
21+ use rustc_target:: abi:: { self , Align , Size , WrappingRange } ;
2222use rustc_target:: spec:: { HasTargetSpec , Target } ;
2323use std:: borrow:: Cow ;
2424use std:: ffi:: CStr ;
2525use std:: iter;
26- use std:: ops:: { Deref , Range } ;
26+ use std:: ops:: Deref ;
2727use std:: ptr;
2828use tracing:: debug;
2929
@@ -382,7 +382,7 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
382382 val
383383 }
384384 }
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 {
386386 if scalar. is_bool ( ) {
387387 return self . trunc ( val, self . cx ( ) . type_i1 ( ) ) ;
388388 }
@@ -460,16 +460,15 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
460460 fn scalar_load_metadata < ' a , ' ll , ' tcx > (
461461 bx : & mut Builder < ' a , ' ll , ' tcx > ,
462462 load : & ' ll Value ,
463- scalar : & abi:: Scalar ,
463+ scalar : abi:: Scalar ,
464464 ) {
465465 match scalar. value {
466466 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 ) ;
470469 }
471470 }
472- abi:: Pointer if !scalar. valid_range . contains_zero ( ) => {
471+ abi:: Pointer if !scalar. valid_range . contains ( 0 ) => {
473472 bx. nonnull_metadata ( load) ;
474473 }
475474 _ => { }
@@ -489,17 +488,17 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
489488 }
490489 let llval = const_llval. unwrap_or_else ( || {
491490 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 {
493492 scalar_load_metadata ( self , load, scalar) ;
494493 }
495494 load
496495 } ) ;
497496 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 {
499498 let b_offset = a. value . size ( self ) . align_to ( b. value . align ( self ) . abi ) ;
500499 let pair_ty = place. layout . llvm_type ( self ) ;
501500
502- let mut load = |i, scalar : & abi:: Scalar , align| {
501+ let mut load = |i, scalar : abi:: Scalar , align| {
503502 let llptr = self . struct_gep ( pair_ty, place. llval , i as u64 ) ;
504503 let llty = place. layout . scalar_pair_element_llvm_type ( self , i, false ) ;
505504 let load = self . load ( llty, llptr, align) ;
@@ -555,7 +554,7 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
555554 next_bx
556555 }
557556
558- fn range_metadata ( & mut self , load : & ' ll Value , range : Range < u128 > ) {
557+ fn range_metadata ( & mut self , load : & ' ll Value , range : WrappingRange ) {
559558 if self . sess ( ) . target . arch == "amdgpu" {
560559 // amdgpu/LLVM does something weird and thinks an i64 value is
561560 // split into a v2i32, halving the bitwidth LLVM expects,
@@ -568,7 +567,7 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
568567 let llty = self . cx . val_ty ( load) ;
569568 let v = [
570569 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 ) ) ,
572571 ] ;
573572
574573 llvm:: LLVMSetMetadata (
0 commit comments