aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--docs/CommandGuide/FileCheck.rst10
-rw-r--r--docs/Phabricator.rst4
-rw-r--r--docs/TestingGuide.html4
-rw-r--r--include/llvm/CodeGen/MachineScheduler.h9
-rw-r--r--include/llvm/CodeGen/RegisterPressure.h3
-rw-r--r--include/llvm/CodeGen/ScheduleDAG.h72
-rw-r--r--include/llvm/CodeGen/ScheduleDAGInstrs.h7
-rw-r--r--include/llvm/CodeGen/TargetSchedule.h56
-rw-r--r--include/llvm/DebugInfo/DIContext.h11
-rw-r--r--include/llvm/ExecutionEngine/ExecutionEngine.h7
-rw-r--r--include/llvm/ExecutionEngine/JITEventListener.h15
-rw-r--r--include/llvm/IntrinsicsX86.td12
-rw-r--r--include/llvm/MC/MCSchedule.h4
-rw-r--r--include/llvm/Object/RelocVisitor.h131
-rw-r--r--include/llvm/Support/DataExtractor.h1
-rw-r--r--include/llvm/Target/TargetTransformImpl.h6
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.cpp78
-rw-r--r--lib/CodeGen/MachineScheduler.cpp920
-rw-r--r--lib/CodeGen/RegAllocFast.cpp5
-rw-r--r--lib/CodeGen/RegisterPressure.cpp21
-rw-r--r--lib/CodeGen/ScheduleDAGInstrs.cpp57
-rw-r--r--lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp21
-rw-r--r--lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp36
-rw-r--r--lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp11
-rw-r--r--lib/CodeGen/TargetSchedule.cpp39
-rw-r--r--lib/DebugInfo/DIContext.cpp5
-rw-r--r--lib/DebugInfo/DWARFContext.h11
-rw-r--r--lib/DebugInfo/DWARFFormValue.cpp25
-rw-r--r--lib/ExecutionEngine/IntelJITEvents/IntelJITEventListener.cpp10
-rw-r--r--lib/ExecutionEngine/MCJIT/MCJIT.cpp50
-rw-r--r--lib/ExecutionEngine/MCJIT/MCJIT.h10
-rw-r--r--lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp16
-rw-r--r--lib/MC/MCParser/AsmParser.cpp4
-rw-r--r--lib/Support/MemoryBuffer.cpp48
-rw-r--r--lib/Target/ARM/ARMBaseRegisterInfo.cpp5
-rw-r--r--lib/Target/ARM/ARMBaseRegisterInfo.h1
-rw-r--r--lib/Target/ARM/ARMCallingConv.td4
-rw-r--r--lib/Target/ARM/ARMExpandPseudoInsts.cpp4
-rw-r--r--lib/Target/ARM/ARMFastISel.cpp5
-rw-r--r--lib/Target/ARM/ARMISelLowering.cpp17
-rw-r--r--lib/Target/ARM/ARMInstrInfo.td18
-rw-r--r--lib/Target/ARM/ARMInstrThumb.td4
-rw-r--r--lib/Target/Hexagon/HexagonMachineScheduler.cpp3
-rw-r--r--lib/Target/Mips/MipsISelLowering.cpp32
-rw-r--r--lib/Target/Mips/MipsISelLowering.h1
-rw-r--r--lib/Target/Mips/MipsMachineFunction.h11
-rw-r--r--lib/Target/PowerPC/PPCAsmPrinter.cpp18
-rw-r--r--lib/Target/PowerPC/PPCCallingConv.td7
-rw-r--r--lib/Target/PowerPC/PPCISelLowering.cpp61
-rw-r--r--lib/Target/TargetTransformImpl.cpp54
-rw-r--r--lib/Target/X86/AsmParser/X86AsmLexer.cpp43
-rw-r--r--lib/Target/X86/MCTargetDesc/X86BaseInfo.h16
-rw-r--r--lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp15
-rw-r--r--lib/Target/X86/X86.td5
-rw-r--r--lib/Target/X86/X86ISelLowering.cpp309
-rw-r--r--lib/Target/X86/X86ISelLowering.h11
-rw-r--r--lib/Target/X86/X86InstrFormats.td17
-rw-r--r--lib/Target/X86/X86InstrInfo.td3
-rw-r--r--lib/Target/X86/X86InstrSSE.td8
-rw-r--r--lib/Target/X86/X86InstrTSX.td32
-rw-r--r--lib/Target/X86/X86Subtarget.cpp5
-rw-r--r--lib/Target/X86/X86Subtarget.h4
-rw-r--r--lib/Transforms/Instrumentation/AddressSanitizer.cpp5
-rw-r--r--lib/Transforms/Scalar/SimplifyLibCalls.cpp35
-rw-r--r--lib/Transforms/Utils/SimplifyCFG.cpp3
-rw-r--r--lib/Transforms/Utils/SimplifyLibCalls.cpp31
-rw-r--r--test/Analysis/CostModel/X86/arith.ll2
-rw-r--r--test/Analysis/CostModel/X86/cast.ll69
-rw-r--r--test/Analysis/CostModel/X86/cmp.ll42
-rw-r--r--test/Analysis/CostModel/X86/i32.ll9
-rw-r--r--test/Analysis/CostModel/X86/insert-extract-at-zero.ll7
-rw-r--r--test/CodeGen/Mips/eh-dwarf-cfa.ll63
-rw-r--r--test/CodeGen/PowerPC/asm-Zy.ll14
-rw-r--r--test/CodeGen/PowerPC/coalesce-ext.ll3
-rw-r--r--test/CodeGen/PowerPC/ppc64-abi-extend.ll97
-rw-r--r--test/CodeGen/X86/misched-balance.ll230
-rw-r--r--test/CodeGen/X86/rtm.ll30
-rw-r--r--test/DebugInfo/X86/elf-names.ll109
-rw-r--r--test/MC/MachO/gen-dwarf-macro-cpp.s17
-rw-r--r--test/MC/X86/x86_64-rtm-encoding.s13
-rw-r--r--test/Transforms/InstCombine/strspn-1.ll56
-rw-r--r--test/Transforms/LoopVectorize/X86/conversion-cost.ll4
-rw-r--r--test/Transforms/LoopVectorize/X86/cost-model.ll2
-rw-r--r--test/Transforms/SimplifyCFG/X86/lit.local.cfg6
-rw-r--r--test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll (renamed from test/Transforms/SimplifyCFG/switch_to_lookup_table.ll)4
-rw-r--r--test/Transforms/SimplifyCFG/switch_create.ll5
-rw-r--r--test/Transforms/SimplifyLibCalls/StrSpn.ll16
-rw-r--r--tools/lli/CMakeLists.txt2
-rw-r--r--tools/lli/LLVMBuild.txt2
-rw-r--r--tools/lli/Makefile2
-rw-r--r--tools/lli/lli.cpp5
-rw-r--r--tools/llvm-dwarfdump/llvm-dwarfdump.cpp59
-rw-r--r--utils/TableGen/X86RecognizableInstr.cpp17
94 files changed, 2784 insertions, 611 deletions
diff --git a/Makefile b/Makefile
index 3bc1f5da52..f8d89ebd62 100644
--- a/Makefile
+++ b/Makefile
@@ -74,12 +74,10 @@ endif
ifeq ($(MAKECMDGOALS),install-clang)
DIRS := tools/clang/tools/driver tools/clang/lib/Headers \
tools/clang/tools/libclang \
+ tools/clang/tools/c-index-test \
tools/clang/include/clang-c \
tools/clang/runtime tools/clang/docs \
tools/lto runtime
- ifneq ($(BUILD_CLANG_ONLY),YES)
- DIRS += tools/clang/tools/c-index-test
- endif
OPTIONAL_DIRS :=
NO_INSTALL = 1
endif
diff --git a/docs/CommandGuide/FileCheck.rst b/docs/CommandGuide/FileCheck.rst
index 51a9bf6293..1d7a462bd7 100644
--- a/docs/CommandGuide/FileCheck.rst
+++ b/docs/CommandGuide/FileCheck.rst
@@ -45,6 +45,11 @@ OPTIONS
+**--input-file** *filename*
+
+ File to check (defaults to stdin).
+
+
**--strict-whitespace**
By default, FileCheck canonicalizes input horizontal whitespace (spaces and
@@ -271,8 +276,9 @@ simple example:
The first check line matches a regex (**%[a-z]+**) and captures it into
the variable "REGISTER". The second line verifies that whatever is in REGISTER
occurs later in the file after an "andw". FileCheck variable references are
-always contained in **[[ ]]** pairs, are named, and their names can be
-name, then it is a definition of the variable, if not, it is a use.
+always contained in **[[ ]]** pairs, and their names can be formed with the
+regex **[a-zA-Z][a-zA-Z0-9]***. If a colon follows the name, then it is a
+definition of the variable; otherwise, it is a use.
FileCheck variables can be defined multiple times, and uses always get the
latest value. Note that variables are all read at the start of a "CHECK" line
diff --git a/docs/Phabricator.rst b/docs/Phabricator.rst
index 13ef9eddd3..b45449793e 100644
--- a/docs/Phabricator.rst
+++ b/docs/Phabricator.rst
@@ -50,8 +50,8 @@ reviewer understand your code.
To get a full diff, use one of the following commands (or just use Arcanist
to upload your patch):
-* git diff -U999999 other-branch
-* svn diff --diff-cmd=diff -x -U999999
+* ``git diff -U999999 other-branch``
+* ``svn diff --diff-cmd=diff -x -U999999``
To upload a new patch:
diff --git a/docs/TestingGuide.html b/docs/TestingGuide.html
index ae2643fe4e..d90c8ad1c3 100644
--- a/docs/TestingGuide.html
+++ b/docs/TestingGuide.html
@@ -218,11 +218,11 @@ you can run the LLVM and Clang tests simultaneously using:</p>
<p>To run individual tests or subsets of tests, you can use the 'llvm-lit'
script which is built as part of LLVM. For example, to run the
-'Integer/BitCast.ll' test by itself you can run:</p>
+'Integer/BitPacked.ll' test by itself you can run:</p>
<div class="doc_code">
<pre>
-% llvm-lit ~/llvm/test/Integer/BitCast.ll
+% llvm-lit ~/llvm/test/Integer/BitPacked.ll
</pre>
</div>
diff --git a/include/llvm/CodeGen/MachineScheduler.h b/include/llvm/CodeGen/MachineScheduler.h
index 2b96c7abe4..31bd606f93 100644
--- a/include/llvm/CodeGen/MachineScheduler.h
+++ b/include/llvm/CodeGen/MachineScheduler.h
@@ -154,6 +154,8 @@ public:
bool empty() const { return Queue.empty(); }
+ void clear() { Queue.clear(); }
+
unsigned size() const { return Queue.size(); }
typedef std::vector<SUnit*>::iterator iterator;
@@ -171,10 +173,12 @@ public:
SU->NodeQueueId |= ID;
}
- void remove(iterator I) {
+ iterator remove(iterator I) {
(*I)->NodeQueueId &= ~ID;
*I = Queue.back();
+ unsigned idx = I - Queue.begin();
Queue.pop_back();
+ return Queue.begin() + idx;
}
#ifndef NDEBUG
@@ -306,6 +310,9 @@ protected:
/// Reinsert debug_values recorded in ScheduleDAGInstrs::DbgValues.
void placeDebugValues();
+ /// \brief dump the scheduled Sequence.
+ void dumpSchedule() const;
+
// Lesser helpers...
void initRegPressure();
diff --git a/include/llvm/CodeGen/RegisterPressure.h b/include/llvm/CodeGen/RegisterPressure.h
index 2043155bc5..30326d05df 100644
--- a/include/llvm/CodeGen/RegisterPressure.h
+++ b/include/llvm/CodeGen/RegisterPressure.h
@@ -43,7 +43,7 @@ struct RegisterPressure {
/// class. This is only useful to account for spilling or rematerialization.
void decrease(const TargetRegisterClass *RC, const TargetRegisterInfo *TRI);
- void dump(const TargetRegisterInfo *TRI);
+ void dump(const TargetRegisterInfo *TRI) const;
};
/// RegisterPressure computed within a region of instructions delimited by
@@ -197,6 +197,7 @@ public:
/// This result is complete if either advance() or recede() has returned true,
/// or if closeRegion() was explicitly invoked.
RegisterPressure &getPressure() { return P; }
+ const RegisterPressure &getPressure() const { return P; }
/// Get the register set pressure at the current position, which may be less
/// than the pressure across the traversed region.
diff --git a/include/llvm/CodeGen/ScheduleDAG.h b/include/llvm/CodeGen/ScheduleDAG.h
index 05b74b09cb..7e0ca1478e 100644
--- a/include/llvm/CodeGen/ScheduleDAG.h
+++ b/include/llvm/CodeGen/ScheduleDAG.h
@@ -31,6 +31,7 @@ namespace llvm {
class MachineFunction;
class MachineRegisterInfo;
class MachineInstr;
+ struct MCSchedClassDesc;
class TargetRegisterInfo;
class ScheduleDAG;
class SDNode;
@@ -52,6 +53,13 @@ namespace llvm {
Order ///< Any other ordering dependency.
};
+ enum OrderKind {
+ Barrier, ///< An unknown scheduling barrier.
+ MayAliasMem, ///< Nonvolatile load/Store instructions that may alias.
+ MustAliasMem, ///< Nonvolatile load/Store instructions that must alias.
+ Artificial ///< Arbitrary weak DAG edge (no actual dependence).
+ };
+
private:
/// Dep - A pointer to the depending/depended-on SUnit, and an enum
/// indicating the kind of the dependency.
@@ -65,20 +73,7 @@ namespace llvm {
unsigned Reg;
/// Order - Additional information about Order dependencies.
- struct {
- /// isNormalMemory - True if both sides of the dependence
- /// access memory in non-volatile and fully modeled ways.
- bool isNormalMemory : 1;
-
- /// isMustAlias - True if both sides of the dependence are known to
- /// access the same memory.
- bool isMustAlias : 1;
-
- /// isArtificial - True if this is an artificial dependency, meaning
- /// it is not necessary for program correctness, and may be safely
- /// deleted if necessary.
- bool isArtificial : 1;
- } Order;
+ unsigned OrdKind; // enum OrderKind
} Contents;
/// Latency - The time associated with this edge. Often this is just
@@ -86,6 +81,9 @@ namespace llvm {
/// models may provide additional information about specific edges.
unsigned Latency;
/// Record MinLatency seperately from "expected" Latency.
+ ///
+ /// FIXME: this field is not packed on LP64. Convert to 16-bit DAG edge
+ /// latency after introducing saturating truncation.
unsigned MinLatency;
public:
@@ -95,28 +93,28 @@ namespace llvm {
SDep() : Dep(0, Data) {}
/// SDep - Construct an SDep with the specified values.
- SDep(SUnit *S, Kind kind, unsigned latency = 1, unsigned Reg = 0,
- bool isNormalMemory = false, bool isMustAlias = false,
- bool isArtificial = false)
- : Dep(S, kind), Conte