Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/graphKit.cpp @ 23054:55d07ec5bde4
8036851: volatile double accesses are not explicitly atomic in C2
Summary: The C2 structure is adapted to distinguish between volatile and non-volatile double accesses.
Reviewed-by: twisti, kvn
Contributed-by: Tobias Hartmann <tobias.hartmann@oracle.com>
author | anoll |
---|---|
date | Tue, 06 May 2014 09:17:57 +0200 |
parents | 4eeec0cdeb6a |
children | c1c199dde5c9 |
comparison
equal
deleted
inserted
replaced
23053:8c3941f2020c | 23054:55d07ec5bde4 |
---|---|
1458 debug_only(adr_type = C->get_adr_type(adr_idx)); | 1458 debug_only(adr_type = C->get_adr_type(adr_idx)); |
1459 Node* mem = memory(adr_idx); | 1459 Node* mem = memory(adr_idx); |
1460 Node* ld; | 1460 Node* ld; |
1461 if (require_atomic_access && bt == T_LONG) { | 1461 if (require_atomic_access && bt == T_LONG) { |
1462 ld = LoadLNode::make_atomic(C, ctl, mem, adr, adr_type, t, mo); | 1462 ld = LoadLNode::make_atomic(C, ctl, mem, adr, adr_type, t, mo); |
1463 } else if (require_atomic_access && bt == T_DOUBLE) { | |
1464 ld = LoadDNode::make_atomic(C, ctl, mem, adr, adr_type, t, mo); | |
1463 } else { | 1465 } else { |
1464 ld = LoadNode::make(_gvn, ctl, mem, adr, adr_type, t, bt, mo); | 1466 ld = LoadNode::make(_gvn, ctl, mem, adr, adr_type, t, bt, mo); |
1465 } | 1467 } |
1466 ld = _gvn.transform(ld); | 1468 ld = _gvn.transform(ld); |
1467 if ((bt == T_OBJECT) && C->do_escape_analysis() || C->eliminate_boxing()) { | 1469 if ((bt == T_OBJECT) && C->do_escape_analysis() || C->eliminate_boxing()) { |
1480 debug_only(adr_type = C->get_adr_type(adr_idx)); | 1482 debug_only(adr_type = C->get_adr_type(adr_idx)); |
1481 Node *mem = memory(adr_idx); | 1483 Node *mem = memory(adr_idx); |
1482 Node* st; | 1484 Node* st; |
1483 if (require_atomic_access && bt == T_LONG) { | 1485 if (require_atomic_access && bt == T_LONG) { |
1484 st = StoreLNode::make_atomic(C, ctl, mem, adr, adr_type, val, mo); | 1486 st = StoreLNode::make_atomic(C, ctl, mem, adr, adr_type, val, mo); |
1487 } else if (require_atomic_access && bt == T_DOUBLE) { | |
1488 st = StoreDNode::make_atomic(C, ctl, mem, adr, adr_type, val, mo); | |
1485 } else { | 1489 } else { |
1486 st = StoreNode::make(_gvn, ctl, mem, adr, adr_type, val, bt, mo); | 1490 st = StoreNode::make(_gvn, ctl, mem, adr, adr_type, val, bt, mo); |
1487 } | 1491 } |
1488 st = _gvn.transform(st); | 1492 st = _gvn.transform(st); |
1489 set_memory(st, adr_idx); | 1493 set_memory(st, adr_idx); |