mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	Revert 202433 - Provide a target override for the latest regalloc heuristic
That commit was introduced in order to help investigate a problem in ARM codegen breaking from commit 202304 (Add a limit to the heuristic that register allocates instructions in local order). Recent analisys indicated that the problem no longer exists, so I'm reverting this change. See PR18996. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218981 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -683,12 +683,6 @@ public: | |||||||
|   /// (3) Bottom-up allocation is no longer guaranteed to optimally color. |   /// (3) Bottom-up allocation is no longer guaranteed to optimally color. | ||||||
|   virtual bool reverseLocalAssignment() const { return false; } |   virtual bool reverseLocalAssignment() const { return false; } | ||||||
|  |  | ||||||
|   /// Allow the target to override register assignment heuristics based on the |  | ||||||
|   /// live range size. If this returns false, then local live ranges are always |  | ||||||
|   /// assigned in order regardless of their size. This is a temporary hook for |  | ||||||
|   /// debugging downstream codegen failures exposed by regalloc. |  | ||||||
|   virtual bool mayOverrideLocalAssignment() const { return true; } |  | ||||||
|  |  | ||||||
|   /// Allow the target to override the cost of using a callee-saved register for |   /// Allow the target to override the cost of using a callee-saved register for | ||||||
|   /// the first time. Default value of 0 means we will use a callee-saved |   /// the first time. Default value of 0 means we will use a callee-saved | ||||||
|   /// register if it is available. |   /// register if it is available. | ||||||
|   | |||||||
| @@ -514,7 +514,7 @@ void RAGreedy::enqueue(PQueue &CurQueue, LiveInterval *LI) { | |||||||
|     // Giant live ranges fall back to the global assignment heuristic, which |     // Giant live ranges fall back to the global assignment heuristic, which | ||||||
|     // prevents excessive spilling in pathological cases. |     // prevents excessive spilling in pathological cases. | ||||||
|     bool ReverseLocal = TRI->reverseLocalAssignment(); |     bool ReverseLocal = TRI->reverseLocalAssignment(); | ||||||
|     bool ForceGlobal = !ReverseLocal && TRI->mayOverrideLocalAssignment() && |     bool ForceGlobal = !ReverseLocal && | ||||||
|       (Size / SlotIndex::InstrDist) > (2 * MRI->getRegClass(Reg)->getNumRegs()); |       (Size / SlotIndex::InstrDist) > (2 * MRI->getRegClass(Reg)->getNumRegs()); | ||||||
|  |  | ||||||
|     if (ExtraRegInfo[Reg].Stage == RS_Assign && !ForceGlobal && !LI->empty() && |     if (ExtraRegInfo[Reg].Stage == RS_Assign && !ForceGlobal && !LI->empty() && | ||||||
|   | |||||||
| @@ -423,11 +423,6 @@ emitLoadConstPool(MachineBasicBlock &MBB, | |||||||
|     .setMIFlags(MIFlags); |     .setMIFlags(MIFlags); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ARMBaseRegisterInfo::mayOverrideLocalAssignment() const { |  | ||||||
|   // The native linux build hits a downstream codegen bug when this is enabled. |  | ||||||
|   return STI.isTargetDarwin(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ARMBaseRegisterInfo:: | bool ARMBaseRegisterInfo:: | ||||||
| requiresRegisterScavenging(const MachineFunction &MF) const { | requiresRegisterScavenging(const MachineFunction &MF) const { | ||||||
|   return true; |   return true; | ||||||
|   | |||||||
| @@ -174,8 +174,6 @@ public: | |||||||
|                                  unsigned MIFlags = MachineInstr::NoFlags)const; |                                  unsigned MIFlags = MachineInstr::NoFlags)const; | ||||||
|  |  | ||||||
|   /// Code Generation virtual methods... |   /// Code Generation virtual methods... | ||||||
|   bool mayOverrideLocalAssignment() const override; |  | ||||||
|  |  | ||||||
|   bool requiresRegisterScavenging(const MachineFunction &MF) const override; |   bool requiresRegisterScavenging(const MachineFunction &MF) const override; | ||||||
|  |  | ||||||
|   bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override; |   bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override; | ||||||
|   | |||||||
| @@ -6,8 +6,8 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3 | |||||||
| ; the changes for PR:18825 prevent that spilling. | ; the changes for PR:18825 prevent that spilling. | ||||||
|  |  | ||||||
| ; CHECK: test: | ; CHECK: test: | ||||||
| ; CHECK-NOT: vstmia | ; CHECK: vstmia | ||||||
| ; CHECK-NOT: vldmia | ; CHECK: vldmia | ||||||
| define void @test(i64* %src) #0 { | define void @test(i64* %src) #0 { | ||||||
| entry: | entry: | ||||||
|   %arrayidx39 = getelementptr inbounds i64* %src, i32 13 |   %arrayidx39 = getelementptr inbounds i64* %src, i32 13 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user