diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2011-06-27 18:35:01 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2011-06-27 18:35:01 -0700 |
| commit | 663aa7663533b6b1cbeb2229c95b4bbde1a5d18e (patch) | |
| tree | 389c8eb8d749c8e337dc9811a369751cc0138489 /src/comp | |
| parent | dfccd5a138bfd7b20edcfd9ec1c7fae1eff3480c (diff) | |
| download | rust-663aa7663533b6b1cbeb2229c95b4bbde1a5d18e.tar.gz rust-663aa7663533b6b1cbeb2229c95b4bbde1a5d18e.zip | |
rustc: Call cmp glue directly if we statically know it
Diffstat (limited to 'src/comp')
| -rw-r--r-- | src/comp/middle/trans.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index aa42210cadd..c20b54f1930 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -2984,9 +2984,17 @@ fn call_cmp_glue(&@block_ctxt cx, ValueRef lhs, ValueRef rhs, &ty::t t, r.bcx.build.GEP(r.val, [C_int(0), C_int(abi::tydesc_field_first_param)]); lltydescs = r.bcx.build.Load(lltydescs); - auto llfnptr = - r.bcx.build.GEP(r.val, [C_int(0), C_int(abi::tydesc_field_cmp_glue)]); - auto llfn = r.bcx.build.Load(llfnptr); + + auto llfn; + alt (ti) { + case (none) { + auto llfnptr = r.bcx.build.GEP(r.val, [C_int(0), + C_int(abi::tydesc_field_cmp_glue)]); + llfn = r.bcx.build.Load(llfnptr); + } + case (some(?sti)) { llfn = option::get(sti.cmp_glue); } + } + auto llcmpresultptr = alloca(r.bcx, T_i1()); let vec[ValueRef] llargs = [llcmpresultptr, r.bcx.fcx.lltaskptr, C_null(T_ptr(T_nil())), |
