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
|