You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ut_SG560D/UM.9.14/external/llvm/lib/CodeGen
quectel 55794fdde8 QCM6490:Alyssa:upload QCM6490 android12 base code.
Change-Id: If3e3c4e01b19443714d880ae669aaa8b39edfff7
4 years ago
..
AsmPrinter QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
GlobalISel QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MIRParser QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SelectionDAG QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
AggressiveAntiDepBreaker.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
AggressiveAntiDepBreaker.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
AllocationOrder.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
AllocationOrder.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
Analysis.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
Android.bp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
AntiDepBreaker.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
AtomicExpandPass.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
BasicTargetTransformInfo.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
BranchFolding.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
BranchFolding.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
BuiltinGCs.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
CMakeLists.txt QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
CalcSpillWeights.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
CallingConvLower.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
CodeGen.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
CodeGenPrepare.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
CriticalAntiDepBreaker.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
CriticalAntiDepBreaker.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
DFAPacketizer.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
DeadMachineInstructionElim.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
DetectDeadLanes.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
DwarfEHPrepare.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
EarlyIfConversion.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
EdgeBundles.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ExecutionDepsFix.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ExpandISelPseudos.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ExpandPostRAPseudos.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
FaultMaps.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
FuncletLayout.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
GCMetadata.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
GCMetadataPrinter.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
GCRootLowering.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
GCStrategy.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
GlobalMerge.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
IfConversion.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ImplicitNullChecks.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
InlineSpiller.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
InterferenceCache.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
InterferenceCache.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
InterleavedAccessPass.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
IntrinsicLowering.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LLVMBuild.txt QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LLVMTargetMachine.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LatencyPriorityQueue.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LexicalScopes.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveDebugValues.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveDebugVariables.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveDebugVariables.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveInterval.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveIntervalAnalysis.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveIntervalUnion.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LivePhysRegs.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveRangeCalc.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveRangeCalc.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveRangeEdit.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveRangeUtils.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveRegMatrix.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveStackAnalysis.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LiveVariables.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LocalStackSlotAllocation.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
LowerEmuTLS.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MIRPrinter.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MIRPrinter.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MIRPrintingPass.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineBasicBlock.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineBlockFrequencyInfo.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineBlockPlacement.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineBranchProbabilityInfo.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineCSE.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineCombiner.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineCopyPropagation.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineDominanceFrontier.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineDominators.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineFunction.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineFunctionAnalysis.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineFunctionPass.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineFunctionPrinterPass.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineInstr.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineInstrBundle.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineLICM.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineLoopInfo.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineModuleInfo.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineModuleInfoImpls.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachinePassRegistry.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachinePipeliner.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachinePostDominators.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineRegionInfo.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineRegisterInfo.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineSSAUpdater.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineScheduler.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineSink.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineTraceMetrics.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
MachineVerifier.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
OptimizePHIs.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
PHIElimination.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
PHIEliminationUtils.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
PHIEliminationUtils.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ParallelCG.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
PatchableFunction.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
PeepholeOptimizer.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
PostRAHazardRecognizer.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
PostRASchedulerList.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
PreISelIntrinsicLowering.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ProcessImplicitDefs.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
PrologEpilogInserter.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
PseudoSourceValue.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
README.txt QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegAllocBase.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegAllocBase.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegAllocBasic.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegAllocFast.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegAllocGreedy.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegAllocPBQP.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegUsageInfoCollector.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegUsageInfoPropagate.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegisterClassInfo.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegisterCoalescer.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegisterCoalescer.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegisterPressure.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegisterScavenging.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RegisterUsageInfo.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
RenameIndependentSubregs.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SafeStack.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SafeStackColoring.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SafeStackColoring.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SafeStackLayout.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SafeStackLayout.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ScheduleDAG.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ScheduleDAGInstrs.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ScheduleDAGPrinter.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ScoreboardHazardRecognizer.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ShadowStackGCLowering.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
ShrinkWrap.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SjLjEHPrepare.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SlotIndexes.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SpillPlacement.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SpillPlacement.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
Spiller.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SplitKit.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
SplitKit.h QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
StackColoring.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
StackMapLivenessAnalysis.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
StackMaps.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
StackProtector.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
StackSlotColoring.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
TailDuplication.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
TailDuplicator.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
TargetFrameLoweringImpl.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
TargetInstrInfo.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
TargetLoweringBase.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
TargetLoweringObjectFileImpl.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
TargetOptionsImpl.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
TargetPassConfig.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
TargetRegisterInfo.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
TargetSchedule.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
TwoAddressInstructionPass.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
UnreachableBlockElim.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
VirtRegMap.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
WinEHPrepare.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago
XRayInstrumentation.cpp QCM6490:Alyssa:upload QCM6490 android12 base code. 4 years ago

README.txt

//===---------------------------------------------------------------------===//

Common register allocation / spilling problem:

        mul lr, r4, lr
        str lr, [sp, #+52]
        ldr lr, [r1, #+32]
        sxth r3, r3
        ldr r4, [sp, #+52]
        mla r4, r3, lr, r4

can be:

        mul lr, r4, lr
        mov r4, lr
        str lr, [sp, #+52]
        ldr lr, [r1, #+32]
        sxth r3, r3
        mla r4, r3, lr, r4

and then "merge" mul and mov:

        mul r4, r4, lr
        str r4, [sp, #+52]
        ldr lr, [r1, #+32]
        sxth r3, r3
        mla r4, r3, lr, r4

It also increase the likelihood the store may become dead.

//===---------------------------------------------------------------------===//

bb27 ...
        ...
        %reg1037 = ADDri %reg1039, 1
        %reg1038 = ADDrs %reg1032, %reg1039, %NOREG, 10
    Successors according to CFG: 0x8b03bf0 (#5)

bb76 (0x8b03bf0, LLVM BB @0x8b032d0, ID#5):
    Predecessors according to CFG: 0x8b0c5f0 (#3) 0x8b0a7c0 (#4)
        %reg1039 = PHI %reg1070, mbb<bb76.outer,0x8b0c5f0>, %reg1037, mbb<bb27,0x8b0a7c0>

Note ADDri is not a two-address instruction. However, its result %reg1037 is an
operand of the PHI node in bb76 and its operand %reg1039 is the result of the
PHI node. We should treat it as a two-address code and make sure the ADDri is
scheduled after any node that reads %reg1039.

//===---------------------------------------------------------------------===//

Use local info (i.e. register scavenger) to assign it a free register to allow
reuse:
        ldr r3, [sp, #+4]
        add r3, r3, #3
        ldr r2, [sp, #+8]
        add r2, r2, #2
        ldr r1, [sp, #+4]  <==
        add r1, r1, #1
        ldr r0, [sp, #+4]
        add r0, r0, #2

//===---------------------------------------------------------------------===//

LLVM aggressively lift CSE out of loop. Sometimes this can be negative side-
effects:

R1 = X + 4
R2 = X + 7
R3 = X + 15

loop:
load [i + R1]
...
load [i + R2]
...
load [i + R3]

Suppose there is high register pressure, R1, R2, R3, can be spilled. We need
to implement proper re-materialization to handle this:

R1 = X + 4
R2 = X + 7
R3 = X + 15

loop:
R1 = X + 4  @ re-materialized
load [i + R1]
...
R2 = X + 7 @ re-materialized
load [i + R2]
...
R3 = X + 15 @ re-materialized
load [i + R3]

Furthermore, with re-association, we can enable sharing:

R1 = X + 4
R2 = X + 7
R3 = X + 15

loop:
T = i + X
load [T + 4]
...
load [T + 7]
...
load [T + 15]
//===---------------------------------------------------------------------===//

It's not always a good idea to choose rematerialization over spilling. If all
the load / store instructions would be folded then spilling is cheaper because
it won't require new live intervals / registers. See 2003-05-31-LongShifts for
an example.

//===---------------------------------------------------------------------===//

With a copying garbage collector, derived pointers must not be retained across
collector safe points; the collector could move the objects and invalidate the
derived pointer. This is bad enough in the first place, but safe points can
crop up unpredictably. Consider:

        %array = load { i32, [0 x %obj] }** %array_addr
        %nth_el = getelementptr { i32, [0 x %obj] }* %array, i32 0, i32 %n
        %old = load %obj** %nth_el
        %z = div i64 %x, %y
        store %obj* %new, %obj** %nth_el

If the i64 division is lowered to a libcall, then a safe point will (must)
appear for the call site. If a collection occurs, %array and %nth_el no longer
point into the correct object.

The fix for this is to copy address calculations so that dependent pointers
are never live across safe point boundaries. But the loads cannot be copied
like this if there was an intervening store, so may be hard to get right.

Only a concurrent mutator can trigger a collection at the libcall safe point.
So single-threaded programs do not have this requirement, even with a copying
collector. Still, LLVM optimizations would probably undo a front-end's careful
work.

//===---------------------------------------------------------------------===//

The ocaml frametable structure supports liveness information. It would be good
to support it.

//===---------------------------------------------------------------------===//

The FIXME in ComputeCommonTailLength in BranchFolding.cpp needs to be
revisited. The check is there to work around a misuse of directives in inline
assembly.

//===---------------------------------------------------------------------===//

It would be good to detect collector/target compatibility instead of silently
doing the wrong thing.

//===---------------------------------------------------------------------===//

It would be really nice to be able to write patterns in .td files for copies,
which would eliminate a bunch of explicit predicates on them (e.g. no side 
effects).  Once this is in place, it would be even better to have tblgen 
synthesize the various copy insertion/inspection methods in TargetInstrInfo.

//===---------------------------------------------------------------------===//

Stack coloring improvements:

1. Do proper LiveStackAnalysis on all stack objects including those which are
   not spill slots.
2. Reorder objects to fill in gaps between objects.
   e.g. 4, 1, <gap>, 4, 1, 1, 1, <gap>, 4 => 4, 1, 1, 1, 1, 4, 4

//===---------------------------------------------------------------------===//

The scheduler should be able to sort nearby instructions by their address. For
example, in an expanded memset sequence it's not uncommon to see code like this:

  movl $0, 4(%rdi)
  movl $0, 8(%rdi)
  movl $0, 12(%rdi)
  movl $0, 0(%rdi)

Each of the stores is independent, and the scheduler is currently making an
arbitrary decision about the order.

//===---------------------------------------------------------------------===//

Another opportunitiy in this code is that the $0 could be moved to a register:

  movl $0, 4(%rdi)
  movl $0, 8(%rdi)
  movl $0, 12(%rdi)
  movl $0, 0(%rdi)

This would save substantial code size, especially for longer sequences like
this. It would be easy to have a rule telling isel to avoid matching MOV32mi
if the immediate has more than some fixed number of uses. It's more involved
to teach the register allocator how to do late folding to recover from
excessive register pressure.