Mercurial > hg > truffle
comparison src/share/vm/opto/matcher.cpp @ 14429:2113136690bc
8024921: PPC64 (part 113): Extend Load and Store nodes to know about memory ordering
Summary: Add a field to C2 LoadNode and StoreNode classes which indicates whether the load/store should do an acquire/release on platforms which support it.
Reviewed-by: kvn
author | goetz |
---|---|
date | Fri, 15 Nov 2013 11:05:32 -0800 |
parents | 2b8e28fdf503 |
children | da862781b584 |
comparison
equal
deleted
inserted
replaced
14427:eb178e97560c | 14429:2113136690bc |
---|---|
823 // Share frame pointer while making spill ops | 823 // Share frame pointer while making spill ops |
824 set_shared(fp); | 824 set_shared(fp); |
825 | 825 |
826 // Compute generic short-offset Loads | 826 // Compute generic short-offset Loads |
827 #ifdef _LP64 | 827 #ifdef _LP64 |
828 MachNode *spillCP = match_tree(new (C) LoadNNode(NULL,mem,fp,atp,TypeInstPtr::BOTTOM)); | 828 MachNode *spillCP = match_tree(new (C) LoadNNode(NULL,mem,fp,atp,TypeInstPtr::BOTTOM,MemNode::unordered)); |
829 #endif | 829 #endif |
830 MachNode *spillI = match_tree(new (C) LoadINode(NULL,mem,fp,atp)); | 830 MachNode *spillI = match_tree(new (C) LoadINode(NULL,mem,fp,atp,TypeInt::INT,MemNode::unordered)); |
831 MachNode *spillL = match_tree(new (C) LoadLNode(NULL,mem,fp,atp)); | 831 MachNode *spillL = match_tree(new (C) LoadLNode(NULL,mem,fp,atp,TypeLong::LONG,MemNode::unordered,false)); |
832 MachNode *spillF = match_tree(new (C) LoadFNode(NULL,mem,fp,atp)); | 832 MachNode *spillF = match_tree(new (C) LoadFNode(NULL,mem,fp,atp,Type::FLOAT,MemNode::unordered)); |
833 MachNode *spillD = match_tree(new (C) LoadDNode(NULL,mem,fp,atp)); | 833 MachNode *spillD = match_tree(new (C) LoadDNode(NULL,mem,fp,atp,Type::DOUBLE,MemNode::unordered)); |
834 MachNode *spillP = match_tree(new (C) LoadPNode(NULL,mem,fp,atp,TypeInstPtr::BOTTOM)); | 834 MachNode *spillP = match_tree(new (C) LoadPNode(NULL,mem,fp,atp,TypeInstPtr::BOTTOM,MemNode::unordered)); |
835 assert(spillI != NULL && spillL != NULL && spillF != NULL && | 835 assert(spillI != NULL && spillL != NULL && spillF != NULL && |
836 spillD != NULL && spillP != NULL, ""); | 836 spillD != NULL && spillP != NULL, ""); |
837 | |
838 // Get the ADLC notion of the right regmask, for each basic type. | 837 // Get the ADLC notion of the right regmask, for each basic type. |
839 #ifdef _LP64 | 838 #ifdef _LP64 |
840 idealreg2regmask[Op_RegN] = &spillCP->out_RegMask(); | 839 idealreg2regmask[Op_RegN] = &spillCP->out_RegMask(); |
841 #endif | 840 #endif |
842 idealreg2regmask[Op_RegI] = &spillI->out_RegMask(); | 841 idealreg2regmask[Op_RegI] = &spillI->out_RegMask(); |