diff options
| author | bors <bors@rust-lang.org> | 2022-06-14 17:19:38 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-06-14 17:19:38 +0000 |
| commit | 1f34da9ec8a85b6f86c5fa1c121ab6f88f2f4966 (patch) | |
| tree | 26035c94f6942c918a3bac5708a1cd3071bbe5e9 /compiler/rustc_codegen_cranelift/src | |
| parent | 872503d918b2c3266d828f85e42951df74f5e303 (diff) | |
| parent | 15c1c0652298e9dd3dee45813a2718623f6e3702 (diff) | |
| download | rust-1f34da9ec8a85b6f86c5fa1c121ab6f88f2f4966.tar.gz rust-1f34da9ec8a85b6f86c5fa1c121ab6f88f2f4966.zip | |
Auto merge of #96591 - b-naber:transition-to-valtrees-in-type-system, r=lcnr
Use valtrees as the type-system representation for constant values This is not quite ready yet, there are still some problems with pretty printing and symbol mangling and `deref_const` seems to not work correctly in all cases. Mainly opening now for a perf-run (which should be good to go, despite the still existing problems). r? `@oli-obk` cc `@lcnr` `@RalfJung`
Diffstat (limited to 'compiler/rustc_codegen_cranelift/src')
| -rw-r--r-- | compiler/rustc_codegen_cranelift/src/constant.rs | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/compiler/rustc_codegen_cranelift/src/constant.rs b/compiler/rustc_codegen_cranelift/src/constant.rs index 3d14a0eca52..ef72e6efb94 100644 --- a/compiler/rustc_codegen_cranelift/src/constant.rs +++ b/compiler/rustc_codegen_cranelift/src/constant.rs @@ -127,7 +127,7 @@ pub(crate) fn codegen_constant<'tcx>( ConstantKind::Val(val, ty) => return codegen_const_value(fx, val, ty), }; let const_val = match const_.kind() { - ConstKind::Value(const_val) => const_val, + ConstKind::Value(valtree) => fx.tcx.valtree_to_const_val((const_.ty(), valtree)), ConstKind::Unevaluated(ty::Unevaluated { def, substs, promoted }) if fx.tcx.is_static(def.did) => { @@ -468,9 +468,10 @@ pub(crate) fn mir_operand_get_const_val<'tcx>( ) -> Option<ConstValue<'tcx>> { match operand { Operand::Constant(const_) => match const_.literal { - ConstantKind::Ty(const_) => { - fx.monomorphize(const_).eval(fx.tcx, ParamEnv::reveal_all()).kind().try_to_value() - } + ConstantKind::Ty(const_) => fx + .monomorphize(const_) + .eval_for_mir(fx.tcx, ParamEnv::reveal_all()) + .try_to_value(fx.tcx), ConstantKind::Val(val, _) => Some(val), }, // FIXME(rust-lang/rust#85105): Casts like `IMM8 as u32` result in the const being stored |
