src/share/vm/opto/reg_split.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 7069452 Sdiff src/share/vm/opto

src/share/vm/opto/reg_split.cpp

Print this page




 967             bool uup = umask.is_UP();
 968 
 969             // Need special logic to handle bound USES. Insert a split at this
 970             // bound use if we can't rematerialize the def, or if we need the
 971             // split to form a misaligned pair.
 972             if( !umask.is_AllStack() &&
 973                 (int)umask.Size() <= lrgs(useidx).num_regs() &&
 974                 (!def->rematerialize() ||
 975                  umask.is_misaligned_Pair())) {
 976               // These need a Split regardless of overlap or pressure
 977               // SPLIT - NO DEF - NO CISC SPILL
 978               maxlrg = split_USE(def,b,n,inpidx,maxlrg,dup,false, splits,slidx);
 979               // If it wasn't split bail
 980               if (!maxlrg) {
 981                 return 0;
 982               }
 983               insidx++;  // Reset iterator to skip USE side split
 984               continue;
 985             }
 986 
 987             if (UseFPUForSpilling && n->is_Call() && !uup && !dup ) {
 988               // The use at the call can force the def down so insert
 989               // a split before the use to allow the def more freedom.
 990               maxlrg = split_USE(def,b,n,inpidx,maxlrg,dup,false, splits,slidx);
 991               // If it wasn't split bail
 992               if (!maxlrg) {
 993                 return 0;
 994               }
 995               insidx++;  // Reset iterator to skip USE side split
 996               continue;
 997             }
 998 
 999             // Here is the logic chart which describes USE Splitting:
1000             // 0 = false or DOWN, 1 = true or UP
1001             //
1002             // Overlap | DEF | USE | Action
1003             //-------------------------------------------------------
1004             //    0    |  0  |  0  | Copy - mem -> mem
1005             //    0    |  0  |  1  | Split-UP - Check HRP
1006             //    0    |  1  |  0  | Split-DOWN - Debug Info?
1007             //    0    |  1  |  1  | Copy - reg -> reg




 967             bool uup = umask.is_UP();
 968 
 969             // Need special logic to handle bound USES. Insert a split at this
 970             // bound use if we can't rematerialize the def, or if we need the
 971             // split to form a misaligned pair.
 972             if( !umask.is_AllStack() &&
 973                 (int)umask.Size() <= lrgs(useidx).num_regs() &&
 974                 (!def->rematerialize() ||
 975                  umask.is_misaligned_Pair())) {
 976               // These need a Split regardless of overlap or pressure
 977               // SPLIT - NO DEF - NO CISC SPILL
 978               maxlrg = split_USE(def,b,n,inpidx,maxlrg,dup,false, splits,slidx);
 979               // If it wasn't split bail
 980               if (!maxlrg) {
 981                 return 0;
 982               }
 983               insidx++;  // Reset iterator to skip USE side split
 984               continue;
 985             }
 986 
 987             if (UseFPUForSpilling && n->is_MachCall() && !uup && !dup ) {
 988               // The use at the call can force the def down so insert
 989               // a split before the use to allow the def more freedom.
 990               maxlrg = split_USE(def,b,n,inpidx,maxlrg,dup,false, splits,slidx);
 991               // If it wasn't split bail
 992               if (!maxlrg) {
 993                 return 0;
 994               }
 995               insidx++;  // Reset iterator to skip USE side split
 996               continue;
 997             }
 998 
 999             // Here is the logic chart which describes USE Splitting:
1000             // 0 = false or DOWN, 1 = true or UP
1001             //
1002             // Overlap | DEF | USE | Action
1003             //-------------------------------------------------------
1004             //    0    |  0  |  0  | Copy - mem -> mem
1005             //    0    |  0  |  1  | Split-UP - Check HRP
1006             //    0    |  1  |  0  | Split-DOWN - Debug Info?
1007             //    0    |  1  |  1  | Copy - reg -> reg


src/share/vm/opto/reg_split.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File