diff options
author | John Hodge <tpg@ucc.asn.au> | 2017-04-29 14:13:22 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2017-04-29 14:13:22 +0800 |
commit | 6a2d30690eb4e5c6c2801a6c340ccfb65a3875b9 (patch) | |
tree | 437f2776f868b75f21d32708da61f85c324c75bd /src | |
parent | ab964bfae8b857c64b66ed3fadf0b363e8370929 (diff) | |
download | mrust-6a2d30690eb4e5c6c2801a6c340ccfb65a3875b9.tar.gz |
Add a custom intrinsic to reduce cost of [T]::len
Diffstat (limited to 'src')
-rw-r--r-- | src/main.cpp | 1 | ||||
-rw-r--r-- | src/mir/optimise.cpp | 14 |
2 files changed, 9 insertions, 6 deletions
diff --git a/src/main.cpp b/src/main.cpp index cb506ffb..f06ee545 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -173,6 +173,7 @@ int main(int argc, char *argv[]) ProgramParams params(argc, argv); // Set up cfg values + Cfg_SetValue("rust_compiler", "mrustc"); // TODO: Target spec Cfg_SetFlag("unix"); Cfg_SetFlag("linux"); 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 |