Skip to content

Commit 37cf4a2

Browse files
nikomatsakisbrson
authored andcommitted
---
yaml --- r: 6111 b: refs/heads/master c: 4bd05e5 h: refs/heads/master i: 6109: cda4133 6107: 4b625f1 6103: de128a3 6095: c38ede3 6079: c9ad0e2 v: v3
1 parent 65e1fd7 commit 37cf4a2

File tree

7 files changed

+68
-116
lines changed

7 files changed

+68
-116
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: f1bc9307d82b7ff55ea6fa0eebec2999e5bd8f8a
2+
refs/heads/master: 4bd05e5be2e28e8afcb42db1fe3fd5cbba7ad56b

trunk/src/comp/back/abi.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,11 @@ const closure_elt_bindings: int = 1;
7878

7979
const closure_elt_ty_params: int = 2;
8080

81-
const vec_elt_fill: uint = 0u;
81+
const vec_elt_fill: int = 0;
8282

83-
const vec_elt_alloc: uint = 1u;
83+
const vec_elt_alloc: int = 1;
8484

85-
const vec_elt_elems: uint = 2u;
85+
const vec_elt_elems: int = 2;
8686

8787
const worst_case_glue_call_args: int = 7;
8888

trunk/src/comp/middle/trans.rs

+41-89
Original file line numberDiff line numberDiff line change
@@ -659,14 +659,6 @@ fn dynamic_align_of(cx: @block_ctxt, t: ty::t) -> result {
659659
}
660660
}
661661

662-
// Simple wrapper around GEP that takes an array of ints and wraps them
663-
// in C_int()
664-
fn GEPi(cx: @block_ctxt, base: ValueRef, ixs: [int]) -> ValueRef {
665-
let v: [ValueRef] = [];
666-
for i: int in ixs { v += [C_int(bcx_ccx(cx), i)]; }
667-
ret InBoundsGEP(cx, base, v);
668-
}
669-
670662
// Increment a pointer by a given amount and then cast it to be a pointer
671663
// to a given type.
672664
fn bump_ptr(bcx: @block_ctxt, t: ty::t, base: ValueRef, sz: ValueRef) ->
@@ -898,10 +890,8 @@ fn field_of_tydesc(cx: @block_ctxt, t: ty::t, escapes: bool, field: int) ->
898890
result {
899891
let ti = none::<@tydesc_info>;
900892
let tydesc = get_tydesc(cx, t, escapes, tps_normal, ti).result;
901-
let ccx = bcx_ccx(cx);
902893
ret rslt(tydesc.bcx,
903-
GEP(tydesc.bcx, tydesc.val, [C_int(ccx, 0),
904-
C_int(ccx, field)]));
894+
GEPi(tydesc.bcx, tydesc.val, [0, field]));
905895
}
906896

907897

@@ -1230,7 +1220,7 @@ fn make_generic_glue_inner(cx: @local_ctxt, sp: span, t: ty::t,
12301220
let lltydescs = [mutable];
12311221
let p = 0u;
12321222
while p < ty_param_count {
1233-
let llparam = GEP(load_env_bcx, lltyparams, [C_int(ccx, p as int)]);
1223+
let llparam = GEPi(load_env_bcx, lltyparams, [p as int]);
12341224
llparam = Load(load_env_bcx, llparam);
12351225
std::vec::grow_set(lltydescs, ty_params[p], 0 as ValueRef, llparam);
12361226
p += 1u;
@@ -1354,8 +1344,7 @@ fn make_take_glue(cx: @block_ctxt, v: ValueRef, t: ty::t) {
13541344
fn incr_refcnt_of_boxed(cx: @block_ctxt, box_ptr: ValueRef) -> @block_ctxt {
13551345
let ccx = bcx_ccx(cx);
13561346
let rc_ptr =
1357-
GEP(cx, box_ptr, [C_int(ccx, 0),
1358-
C_int(ccx, abi::box_rc_field_refcnt)]);
1347+
GEPi(cx, box_ptr, [0, abi::box_rc_field_refcnt]);
13591348
let rc = Load(cx, rc_ptr);
13601349
rc = Add(cx, rc, C_int(ccx, 1));
13611350
Store(cx, rc, rc_ptr);
@@ -1369,9 +1358,7 @@ fn make_free_glue(bcx: @block_ctxt, v: ValueRef, t: ty::t) {
13691358
let bcx = alt ty::struct(bcx_tcx(bcx), t) {
13701359
ty::ty_box(body_mt) {
13711360
v = PointerCast(bcx, v, type_of_1(bcx, t));
1372-
let ccx = bcx_ccx(bcx);
1373-
let body = GEP(bcx, v, [C_int(ccx, 0),
1374-
C_int(ccx, abi::box_rc_field_body)]);
1361+
let body = GEPi(bcx, v, [0, abi::box_rc_field_body]);
13751362
let bcx = drop_ty(bcx, body, body_mt.ty);
13761363
if !bcx_ccx(bcx).sess.get_opts().do_gc {
13771364
trans_non_gc_free(bcx, v)
@@ -1391,11 +1378,9 @@ fn make_free_glue(bcx: @block_ctxt, v: ValueRef, t: ty::t) {
13911378
let ccx = bcx_ccx(bcx);
13921379
let llbox_ty = T_opaque_obj_ptr(ccx);
13931380
let b = PointerCast(bcx, v, llbox_ty);
1394-
let body = GEP(bcx, b, [C_int(ccx, 0),
1395-
C_int(ccx, abi::box_rc_field_body)]);
1381+
let body = GEPi(bcx, b, [0, abi::box_rc_field_body]);
13961382
let tydescptr =
1397-
GEP(bcx, body, [C_int(ccx, 0),
1398-
C_int(ccx, abi::obj_body_elt_tydesc)]);
1383+
GEPi(bcx, body, [0, abi::obj_body_elt_tydesc]);
13991384
let tydesc = Load(bcx, tydescptr);
14001385
let ti = none;
14011386
call_tydesc_glue_full(bcx, body, tydesc,
@@ -1409,14 +1394,11 @@ fn make_free_glue(bcx: @block_ctxt, v: ValueRef, t: ty::t) {
14091394
// Then free the body.
14101395
let ccx = bcx_ccx(bcx);
14111396
v = PointerCast(bcx, v, T_opaque_closure_ptr(ccx));
1412-
let body = GEP(bcx, v, [C_int(ccx, 0),
1413-
C_int(ccx, abi::box_rc_field_body)]);
1397+
let body = GEPi(bcx, v, [0, abi::box_rc_field_body]);
14141398
let bindings =
1415-
GEP(bcx, body, [C_int(ccx, 0),
1416-
C_int(ccx, abi::closure_elt_bindings)]);
1399+
GEPi(bcx, body, [0, abi::closure_elt_bindings]);
14171400
let tydescptr =
1418-
GEP(bcx, body, [C_int(ccx, 0),
1419-
C_int(ccx, abi::closure_elt_tydesc)]);
1401+
GEPi(bcx, body, [0, abi::closure_elt_tydesc]);
14201402
let ti = none;
14211403
call_tydesc_glue_full(bcx, bindings, Load(bcx, tydescptr),
14221404
abi::tydesc_field_drop_glue, ti);
@@ -1440,16 +1422,14 @@ fn make_drop_glue(bcx: @block_ctxt, v0: ValueRef, t: ty::t) {
14401422
}
14411423
ty::ty_obj(_) {
14421424
let box_cell =
1443-
GEP(bcx, v0, [C_int(ccx, 0),
1444-
C_int(ccx, abi::obj_field_box)]);
1425+
GEPi(bcx, v0, [0, abi::obj_field_box]);
14451426
decr_refcnt_maybe_free(bcx, Load(bcx, box_cell), t)
14461427
}
14471428
ty::ty_res(did, inner, tps) {
14481429
trans_res_drop(bcx, v0, did, inner, tps)
14491430
}
14501431
ty::ty_fn(_, _, _, _, _) {
1451-
let box_cell = GEP(bcx, v0, [C_int(ccx, 0),
1452-
C_int(ccx, abi::fn_field_box)]);
1432+
let box_cell = GEPi(bcx, v0, [0, abi::fn_field_box]);
14531433
decr_refcnt_maybe_free(bcx, Load(bcx, box_cell), t)
14541434
}
14551435
_ {
@@ -1516,8 +1496,7 @@ fn decr_refcnt_maybe_free(cx: @block_ctxt, box_ptr: ValueRef, t: ty::t)
15161496
let null_test = IsNull(cx, box_ptr);
15171497
CondBr(cx, null_test, next_cx.llbb, rc_adj_cx.llbb);
15181498
let rc_ptr =
1519-
GEP(rc_adj_cx, box_ptr, [C_int(ccx, 0),
1520-
C_int(ccx, abi::box_rc_field_refcnt)]);
1499+
GEPi(rc_adj_cx, box_ptr, [0, abi::box_rc_field_refcnt]);
15211500
let rc = Load(rc_adj_cx, rc_ptr);
15221501
rc = Sub(rc_adj_cx, rc, C_int(ccx, 1));
15231502
Store(rc_adj_cx, rc, rc_ptr);
@@ -1730,8 +1709,8 @@ fn iter_structural_ty(cx: @block_ctxt, av: ValueRef, t: ty::t,
17301709
let ccx = bcx_ccx(cx);
17311710
let lltagty = T_opaque_tag_ptr(ccx);
17321711
let av_tag = PointerCast(cx, av, lltagty);
1733-
let lldiscrim_a_ptr = GEP(cx, av_tag, [C_int(ccx, 0), C_int(ccx, 0)]);
1734-
let llunion_a_ptr = GEP(cx, av_tag, [C_int(ccx, 0), C_int(ccx, 1)]);
1712+
let lldiscrim_a_ptr = GEPi(cx, av_tag, [0, 0]);
1713+
let llunion_a_ptr = GEPi(cx, av_tag, [0, 1]);
17351714
let lldiscrim_a = Load(cx, lldiscrim_a_ptr);
17361715

17371716
// NB: we must hit the discriminant first so that structural
@@ -1756,15 +1735,11 @@ fn iter_structural_ty(cx: @block_ctxt, av: ValueRef, t: ty::t,
17561735
ret next_cx;
17571736
}
17581737
ty::ty_fn(_, _, _, _, _) | ty::ty_native_fn(_, _, _) {
1759-
let ccx = bcx_ccx(cx);
1760-
let box_cell_a = GEP(cx, av, [C_int(ccx, 0),
1761-
C_int(ccx, abi::fn_field_box)]);
1738+
let box_cell_a = GEPi(cx, av, [0, abi::fn_field_box]);
17621739
ret iter_boxpp(cx, box_cell_a, f);
17631740
}
17641741
ty::ty_obj(_) {
1765-
let ccx = bcx_ccx(cx);
1766-
let box_cell_a = GEP(cx, av, [C_int(ccx, 0),
1767-
C_int(ccx, abi::obj_field_box)]);
1742+
let box_cell_a = GEPi(cx, av, [0, abi::obj_field_box]);
17681743
ret iter_boxpp(cx, box_cell_a, f);
17691744
}
17701745
_ { bcx_ccx(cx).sess.unimpl("type in iter_structural_ty"); }
@@ -1880,18 +1855,15 @@ fn call_tydesc_glue_full(cx: @block_ctxt, v: ValueRef, tydesc: ValueRef,
18801855
}
18811856
}
18821857

1883-
let ccx = bcx_ccx(cx);
18841858
let llrawptr = PointerCast(cx, v, T_ptr(T_i8()));
18851859
let lltydescs =
1886-
GEP(cx, tydesc, [C_int(ccx, 0),
1887-
C_int(ccx, abi::tydesc_field_first_param)]);
1860+
GEPi(cx, tydesc, [0, abi::tydesc_field_first_param]);
18881861
lltydescs = Load(cx, lltydescs);
18891862

18901863
let llfn;
18911864
alt static_glue_fn {
18921865
none. {
1893-
let llfnptr = GEP(cx, tydesc, [C_int(ccx, 0),
1894-
C_int(ccx, field)]);
1866+
let llfnptr = GEPi(cx, tydesc, [0, field]);
18951867
llfn = Load(cx, llfnptr);
18961868
}
18971869
some(sgf) { llfn = sgf; }
@@ -1930,18 +1902,15 @@ fn call_cmp_glue(cx: @block_ctxt, lhs: ValueRef, rhs: ValueRef, t: ty::t,
19301902
let lltydesc = r.val;
19311903
bcx = r.bcx;
19321904
lazily_emit_tydesc_glue(bcx, abi::tydesc_field_cmp_glue, ti);
1933-
let ccx = bcx_ccx(bcx);
19341905
let lltydescs =
1935-
GEP(bcx, lltydesc, [C_int(ccx, 0),
1936-
C_int(ccx, abi::tydesc_field_first_param)]);
1906+
GEPi(bcx, lltydesc, [0, abi::tydesc_field_first_param]);
19371907
lltydescs = Load(bcx, lltydescs);
19381908

19391909
let llfn;
19401910
alt ti {
19411911
none. {
19421912
let llfnptr =
1943-
GEP(bcx, lltydesc, [C_int(ccx, 0),
1944-
C_int(ccx, abi::tydesc_field_cmp_glue)]);
1913+
GEPi(bcx, lltydesc, [0, abi::tydesc_field_cmp_glue]);
19451914
llfn = Load(bcx, llfnptr);
19461915
}
19471916
some(sti) { llfn = option::get(sti.cmp_glue); }
@@ -2411,8 +2380,7 @@ fn autoderef(cx: @block_ctxt, v: ValueRef, t: ty::t) -> result_t {
24112380
while true {
24122381
alt ty::struct(ccx.tcx, t1) {
24132382
ty::ty_box(mt) {
2414-
let body = GEP(cx, v1, [C_int(ccx, 0),
2415-
C_int(ccx, abi::box_rc_field_body)]);
2383+
let body = GEPi(cx, v1, [0, abi::box_rc_field_body]);
24162384
t1 = mt.ty;
24172385

24182386
// Since we're changing levels of box indirection, we may have
@@ -2432,7 +2400,7 @@ fn autoderef(cx: @block_ctxt, v: ValueRef, t: ty::t) -> result_t {
24322400
}
24332401
ty::ty_res(did, inner, tps) {
24342402
t1 = ty::substitute_type_params(ccx.tcx, tps, inner);
2435-
v1 = GEP(cx, v1, [C_int(ccx, 0), C_int(ccx, 1)]);
2403+
v1 = GEPi(cx, v1, [0, 1]);
24362404
}
24372405
ty::ty_tag(did, tps) {
24382406
let variants = ty::tag_variants(ccx.tcx, did);
@@ -3031,8 +2999,7 @@ fn trans_var(cx: @block_ctxt, sp: span, def: ast::def, id: ast::node_id)
30312999
let lltagty = type_of_tag(ccx, sp, tid, tag_ty);
30323000
let bcx = alloc_result.bcx;
30333001
let lltagptr = PointerCast(bcx, lltagblob, T_ptr(lltagty));
3034-
let lldiscrimptr = GEP(bcx, lltagptr, [C_int(ccx, 0),
3035-
C_int(ccx, 0)]);
3002+
let lldiscrimptr = GEPi(bcx, lltagptr, [0, 0]);
30363003
let d = if std::vec::len(ty::tag_variants(ccx.tcx, tid)) != 1u {
30373004
let lldiscrim_gv = lookup_discriminant(bcx.fcx.lcx, vid);
30383005
let lldiscrim = Load(bcx, lldiscrim_gv);
@@ -3075,13 +3042,11 @@ fn trans_object_field_inner(bcx: @block_ctxt, o: ValueRef,
30753042
let mths = alt ty::struct(tcx, o_ty) { ty::ty_obj(ms) { ms } };
30763043

30773044
let ix = ty::method_idx(ccx.sess, bcx.sp, field, mths);
3078-
let vtbl = Load(bcx, GEP(bcx, o, [C_int(ccx, 0),
3079-
C_int(ccx, abi::obj_field_vtbl)]));
3045+
let vtbl = Load(bcx, GEPi(bcx, o, [0, abi::obj_field_vtbl]));
30803046
let vtbl_type = T_ptr(T_array(T_ptr(T_nil()), ix + 1u));
30813047
vtbl = PointerCast(bcx, vtbl, vtbl_type);
30823048

3083-
let v = GEP(bcx, vtbl, [C_int(ccx, 0),
3084-
C_int(ccx, ix as int)]);
3049+
let v = GEPi(bcx, vtbl, [0, ix as int]);
30853050
let fn_ty: ty::t = ty::method_ty_to_fn_ty(tcx, mths[ix]);
30863051
let ret_ty = ty::ty_fn_ret(tcx, fn_ty);
30873052
let ret_ref = ast_util::ret_by_ref(ty::ty_fn_ret_style(tcx, fn_ty));
@@ -3225,13 +3190,10 @@ fn trans_lval(cx: @block_ctxt, e: @ast::expr) -> lval_result {
32253190
let val =
32263191
alt ty::struct(ccx.tcx, t) {
32273192
ty::ty_box(_) {
3228-
InBoundsGEP(sub.bcx, sub.val,
3229-
[C_int(ccx, 0),
3230-
C_int(ccx, abi::box_rc_field_body)])
3193+
GEPi(sub.bcx, sub.val, [0, abi::box_rc_field_body])
32313194
}
32323195
ty::ty_res(_, _, _) {
3233-
InBoundsGEP(sub.bcx, sub.val, [C_int(ccx, 0),
3234-
C_int(ccx, 1)])
3196+
GEPi(sub.bcx, sub.val, [0, 1])
32353197
}
32363198
ty::ty_tag(_, _) {
32373199
let ety = ty::expr_ty(ccx.tcx, e);
@@ -3453,11 +3415,9 @@ fn trans_bind_thunk(cx: @local_ctxt, sp: span, incoming_fty: ty::t,
34533415
[0, abi::box_rc_field_body,
34543416
abi::closure_elt_bindings, 0]);
34553417
let lltargetenv =
3456-
Load(cx, GEP(cx, pair, [C_int(ccx, 0),
3457-
C_int(ccx, abi::fn_field_box)]));
3418+
Load(cx, GEPi(cx, pair, [0, abi::fn_field_box]));
34583419
let lltargetfn = Load
3459-
(cx, GEP(cx, pair, [C_int(ccx, 0),
3460-
C_int(ccx, abi::fn_field_code)]));
3420+
(cx, GEPi(cx, pair, [0, abi::fn_field_code]));
34613421
bcx = cx;
34623422
(lltargetfn, lltargetenv, 1)
34633423
}
@@ -3803,7 +3763,6 @@ fn trans_call(in_cx: @block_ctxt, f: @ast::expr,
38033763
// NB: 'f' isn't necessarily a function; it might be an entire self-call
38043764
// expression because of the hack that allows us to process self-calls
38053765
// with trans_call.
3806-
let ccx = bcx_ccx(in_cx);
38073766
let tcx = bcx_tcx(in_cx);
38083767
let fn_expr_ty = ty::expr_ty(tcx, f);
38093768

@@ -3828,11 +3787,9 @@ fn trans_call(in_cx: @block_ctxt, f: @ast::expr,
38283787
faddr = load_if_immediate(bcx, faddr, fn_expr_ty);
38293788
}
38303789
let pair = faddr;
3831-
faddr = GEP(bcx, pair, [C_int(ccx, 0),
3832-
C_int(ccx, abi::fn_field_code)]);
3790+
faddr = GEPi(bcx, pair, [0, abi::fn_field_code]);
38333791
faddr = Load(bcx, faddr);
3834-
let llclosure = GEP(bcx, pair, [C_int(ccx, 0),
3835-
C_int(ccx, abi::fn_field_box)]);
3792+
let llclosure = GEPi(bcx, pair, [0, abi::fn_field_box]);
38363793
llenv = Load(bcx, llclosure);
38373794
}
38383795
}
@@ -5100,25 +5057,23 @@ fn populate_fn_ctxt_from_llself(fcx: @fn_ctxt, llself: val_self_pair) {
51005057
let fields_tup_ty = ty::mk_tup(fcx.lcx.ccx.tcx, field_tys);
51015058
let n_typarams = std::vec::len::<ast::ty_param>(bcx.fcx.lcx.obj_typarams);
51025059
let llobj_box_ty: TypeRef = T_obj_ptr(ccx, n_typarams);
5103-
let box_cell = GEP(bcx, llself.v, [C_int(ccx, 0),
5104-
C_int(ccx, abi::obj_field_box)]);
5060+
let box_cell = GEPi(bcx, llself.v, [0, abi::obj_field_box]);
51055061
let box_ptr = Load(bcx, box_cell);
51065062
box_ptr = PointerCast(bcx, box_ptr, llobj_box_ty);
51075063
let obj_typarams =
5108-
GEP(bcx, box_ptr,
5109-
[C_int(ccx, 0), C_int(ccx, abi::box_rc_field_body),
5110-
C_int(ccx, abi::obj_body_elt_typarams)]);
5064+
GEPi(bcx, box_ptr, [0, abi::box_rc_field_body,
5065+
abi::obj_body_elt_typarams]);
51115066

51125067
// The object fields immediately follow the type parameters, so we skip
51135068
// over them to get the pointer.
51145069
let obj_fields =
5115-
PointerCast(bcx, GEP(bcx, obj_typarams, [C_int(ccx, 1)]),
5070+
PointerCast(bcx, GEPi(bcx, obj_typarams, [1]),
51165071
T_ptr(type_of_or_i8(bcx, fields_tup_ty)));
51175072

51185073
let i: int = 0;
51195074
for p: ast::ty_param in fcx.lcx.obj_typarams {
51205075
let lltyparam: ValueRef =
5121-
GEP(bcx, obj_typarams, [C_int(ccx, 0), C_int(ccx, i)]);
5076+
GEPi(bcx, obj_typarams, [0, i]);
51225077
lltyparam = Load(bcx, lltyparam);
51235078
fcx.lltydescs += [lltyparam];
51245079
i += 1;
@@ -5307,10 +5262,9 @@ fn trans_tag_variant(cx: @local_ctxt, tag_id: ast::node_id,
53075262
} else {
53085263
let lltagptr =
53095264
PointerCast(bcx, fcx.llretptr, T_opaque_tag_ptr(ccx));
5310-
let lldiscrimptr = GEP(bcx, lltagptr, [C_int(ccx, 0),
5311-
C_int(ccx, 0)]);
5265+
let lldiscrimptr = GEPi(bcx, lltagptr, [0, 0]);
53125266
Store(bcx, C_int(ccx, index), lldiscrimptr);
5313-
GEP(bcx, lltagptr, [C_int(ccx, 0), C_int(ccx, 1)])
5267+
GEPi(bcx, lltagptr, [0, 1])
53145268
};
53155269
i = 0u;
53165270
let t_id = ast_util::local_def(tag_id);
@@ -5558,11 +5512,9 @@ fn create_real_fn_pair(cx: @block_ctxt, llfnty: TypeRef, llfn: ValueRef,
55585512
fn fill_fn_pair(bcx: @block_ctxt, pair: ValueRef, llfn: ValueRef,
55595513
llenvptr: ValueRef) {
55605514
let ccx = bcx_ccx(bcx);
5561-
let code_cell = GEP(bcx, pair, [C_int(ccx, 0),
5562-
C_int(ccx, abi::fn_field_code)]);
5515+
let code_cell = GEPi(bcx, pair, [0, abi::fn_field_code]);
55635516
Store(bcx, llfn, code_cell);
5564-
let env_cell = GEP(bcx, pair, [C_int(ccx, 0),
5565-
C_int(ccx, abi::fn_field_box)]);
5517+
let env_cell = GEPi(bcx, pair, [0, abi::fn_field_box]);
55665518
let llenvblobptr =
55675519
PointerCast(bcx, llenvptr, T_opaque_closure_ptr(ccx));
55685520
Store(bcx, llenvblobptr, env_cell);
@@ -5801,7 +5753,7 @@ fn register_native_fn(ccx: @crate_ctxt, sp: span, path: [str], name: str,
58015753
r =
58025754
trans_native_call(new_raw_block_ctxt(bcx.fcx, bcx.llbb),
58035755
ccx.externs, ccx.llmod, name, call_args);
5804-
rptr = BitCast(bcx, fcx.llretptr, T_ptr(T_i32()));
5756+
rptr = BitCast(bcx, fcx.llretptr, T_ptr(ccx.int_type));
58055757
}
58065758
}
58075759
// We don't store the return value if it's nil, to avoid stomping on a nil

0 commit comments

Comments
 (0)