summaryrefslogtreecommitdiff
path: root/src/mir
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-04-29 14:13:22 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-04-29 14:13:22 +0800
commit6a2d30690eb4e5c6c2801a6c340ccfb65a3875b9 (patch)
tree437f2776f868b75f21d32708da61f85c324c75bd /src/mir
parentab964bfae8b857c64b66ed3fadf0b363e8370929 (diff)
downloadmrust-6a2d30690eb4e5c6c2801a6c340ccfb65a3875b9.tar.gz
Add a custom intrinsic to reduce cost of [T]::len
Diffstat (limited to 'src/mir')
-rw-r--r--src/mir/optimise.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/mir/optimise.cpp b/src/mir/optimise.cpp
index b83a1169..81574afd 100644
--- a/src/mir/optimise.cpp
+++ b/src/mir/optimise.cpp
@@ -1396,12 +1396,14 @@ bool MIR_Optimise_ConstPropagte(::MIR::TypeResolve& state, ::MIR::Function& fcn)
bb.terminator = ::MIR::Terminator::make_Goto(te.ret_block);
changed = true;
}
- //else if( tef.name == "get_dst_meta_slice" )
- //{
- // MIR_ASSERT(state, te.args.at(0).is_LValue(), "Argument to `get_dst_meta` must be a lvalue");
- // auto& e = te.args.at(0).as_LValue();
- // bb.statements.push_back(::MIR::Statement::make_Assign({ mv$(te.ret_val), ::MIR::RValue::make_DstMeta({ mv$(*e) }) }));
- //}
+ else if( tef.name == "mrustc_slice_len" )
+ {
+ MIR_ASSERT(state, te.args.at(0).is_LValue(), "Argument to `get_dst_meta` must be a lvalue");
+ auto& e = te.args.at(0).as_LValue();
+ bb.statements.push_back(::MIR::Statement::make_Assign({ mv$(te.ret_val), ::MIR::RValue::make_DstMeta({ mv$(e) }) }));
+ bb.terminator = ::MIR::Terminator::make_Goto(te.ret_block);
+ changed = true;
+ }
else
{
// Ignore any other intrinsics