Author: dim Date: Sat Jan 14 15:37:50 2017 New Revision: 312173 URL: https://svnweb.freebsd.org/changeset/base/312173
Log: Vendor import of llvm release_40 branch r292009: https://llvm.org/svn/llvm-project/llvm/branches/release_40@292009 Added: vendor/llvm/dist/cmake/modules/CheckLinkerFlag.cmake vendor/llvm/dist/include/llvm/Analysis/LoopAnalysisManager.h (contents, props changed) vendor/llvm/dist/include/llvm/DebugInfo/CodeView/CVTypeDumper.h (contents, props changed) vendor/llvm/dist/include/llvm/DebugInfo/CodeView/TypeDatabase.h (contents, props changed) vendor/llvm/dist/include/llvm/DebugInfo/CodeView/TypeDatabaseVisitor.h (contents, props changed) vendor/llvm/dist/include/llvm/DebugInfo/CodeView/TypeDumpVisitor.h (contents, props changed) vendor/llvm/dist/include/llvm/DebugInfo/CodeView/TypeDumperBase.h (contents, props changed) vendor/llvm/dist/include/llvm/Object/Decompressor.h (contents, props changed) vendor/llvm/dist/include/llvm/Transforms/Scalar/IVUsersPrinter.h (contents, props changed) vendor/llvm/dist/include/llvm/Transforms/Scalar/LoopAccessAnalysisPrinter.h (contents, props changed) vendor/llvm/dist/include/llvm/Transforms/Scalar/LoopPassManager.h (contents, props changed) vendor/llvm/dist/include/llvm/XRay/ vendor/llvm/dist/include/llvm/XRay/Trace.h (contents, props changed) vendor/llvm/dist/include/llvm/XRay/XRayRecord.h (contents, props changed) vendor/llvm/dist/include/llvm/XRay/YAMLXRayRecord.h (contents, props changed) vendor/llvm/dist/lib/Analysis/LoopAnalysisManager.cpp (contents, props changed) vendor/llvm/dist/lib/DebugInfo/CodeView/CVTypeDumper.cpp (contents, props changed) vendor/llvm/dist/lib/DebugInfo/CodeView/TypeDatabase.cpp (contents, props changed) vendor/llvm/dist/lib/DebugInfo/CodeView/TypeDatabaseVisitor.cpp (contents, props changed) vendor/llvm/dist/lib/DebugInfo/CodeView/TypeDumpVisitor.cpp (contents, props changed) vendor/llvm/dist/lib/Object/Decompressor.cpp (contents, props changed) vendor/llvm/dist/lib/Transforms/Scalar/IVUsersPrinter.cpp (contents, props changed) vendor/llvm/dist/lib/Transforms/Scalar/LoopAccessAnalysisPrinter.cpp (contents, props changed) vendor/llvm/dist/lib/Transforms/Scalar/LoopPassManager.cpp (contents, props changed) vendor/llvm/dist/lib/XRay/ vendor/llvm/dist/lib/XRay/CMakeLists.txt (contents, props changed) vendor/llvm/dist/lib/XRay/Trace.cpp (contents, props changed) vendor/llvm/dist/test/Analysis/CostModel/X86/slm-arith-costs.ll vendor/llvm/dist/test/CodeGen/AMDGPU/constant-fold-imm-immreg.mir vendor/llvm/dist/test/CodeGen/AMDGPU/fadd-fma-fmul-combine.ll vendor/llvm/dist/test/CodeGen/AMDGPU/fneg-combines.ll vendor/llvm/dist/test/CodeGen/AMDGPU/fp16_to_fp32.ll vendor/llvm/dist/test/CodeGen/AMDGPU/fp16_to_fp64.ll vendor/llvm/dist/test/CodeGen/AMDGPU/select-fabs-fneg-extract-legacy.ll vendor/llvm/dist/test/CodeGen/AMDGPU/select-fabs-fneg-extract.ll vendor/llvm/dist/test/CodeGen/AMDGPU/select-opt.ll vendor/llvm/dist/test/CodeGen/AMDGPU/shrink-vop3-carry-out.mir vendor/llvm/dist/test/CodeGen/Mips/msa/immediates-bad.ll vendor/llvm/dist/test/CodeGen/Mips/msa/immediates.ll vendor/llvm/dist/test/CodeGen/Mips/msa/msa-nooddspreg.ll vendor/llvm/dist/test/CodeGen/PowerPC/change-no-infs.ll vendor/llvm/dist/test/CodeGen/X86/bypass-slow-division-32.ll vendor/llvm/dist/test/CodeGen/X86/bypass-slow-division-64.ll vendor/llvm/dist/test/CodeGen/X86/bypass-slow-division-tune.ll vendor/llvm/dist/test/CodeGen/X86/change-unsafe-fp-math.ll vendor/llvm/dist/test/CodeGen/X86/peephole.mir vendor/llvm/dist/test/CodeGen/X86/vector-shuffle-avx512.ll vendor/llvm/dist/test/DebugInfo/Inputs/implicit-const-test.o (contents, props changed) vendor/llvm/dist/test/DebugInfo/dwarfdump-implicit-const.test vendor/llvm/dist/test/FileCheck/match-full-lines.txt (contents, props changed) vendor/llvm/dist/test/ObjectYAML/MachO/DWARF-debug_line.yaml vendor/llvm/dist/test/Transforms/LICM/opt-remarks-conditional-load.ll vendor/llvm/dist/test/Transforms/LICM/opt-remarks-intervening-store.ll vendor/llvm/dist/test/Transforms/LICM/opt-remarks.ll vendor/llvm/dist/test/Transforms/LoopVectorize/X86/mul_slm_16bit.ll vendor/llvm/dist/test/Transforms/LoopVectorize/pr31190.ll vendor/llvm/dist/test/Transforms/NewGVN/pr31594.ll vendor/llvm/dist/test/Transforms/PGOProfile/Inputs/multiple_hash_profile.proftext vendor/llvm/dist/test/Transforms/PGOProfile/multiple_hash_profile.ll vendor/llvm/dist/test/Transforms/SLPVectorizer/X86/pr31599.ll vendor/llvm/dist/test/tools/llvm-config/booleans.test vendor/llvm/dist/test/tools/llvm-xray/X86/Inputs/elf64-objcopied-instrmap.bin (contents, props changed) vendor/llvm/dist/test/tools/llvm-xray/X86/Inputs/elf64-sample-o2.bin (contents, props changed) vendor/llvm/dist/test/tools/llvm-xray/X86/Inputs/naive-log-simple.xray (contents, props changed) vendor/llvm/dist/test/tools/llvm-xray/X86/Inputs/simple-instrmap.yaml vendor/llvm/dist/test/tools/llvm-xray/X86/Inputs/simple-xray-instrmap.yaml vendor/llvm/dist/test/tools/llvm-xray/X86/account-deduce-tail-call.yaml vendor/llvm/dist/test/tools/llvm-xray/X86/account-keep-going.yaml vendor/llvm/dist/test/tools/llvm-xray/X86/account-simple-case.yaml vendor/llvm/dist/test/tools/llvm-xray/X86/account-simple-sorting.yaml vendor/llvm/dist/test/tools/llvm-xray/X86/bad-instrmap-sizes.txt (contents, props changed) vendor/llvm/dist/test/tools/llvm-xray/X86/convert-roundtrip.yaml vendor/llvm/dist/test/tools/llvm-xray/X86/convert-to-yaml.txt (contents, props changed) vendor/llvm/dist/test/tools/llvm-xray/X86/convert-with-debug-syms.txt (contents, props changed) vendor/llvm/dist/test/tools/llvm-xray/X86/convert-with-standalone-instrmap.txt (contents, props changed) vendor/llvm/dist/test/tools/llvm-xray/X86/convert-with-yaml-instrmap.txt (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyBuiltinDumper.cpp (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyBuiltinDumper.h (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyClassDefinitionDumper.cpp (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyClassDefinitionDumper.h (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyCompilandDumper.cpp (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyCompilandDumper.h (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyEnumDumper.cpp (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyEnumDumper.h (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyExternalSymbolDumper.cpp (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyExternalSymbolDumper.h (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyFunctionDumper.cpp (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyFunctionDumper.h (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyTypeDumper.cpp (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyTypeDumper.h (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyTypedefDumper.cpp (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyTypedefDumper.h (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyVariableDumper.cpp (contents, props changed) vendor/llvm/dist/tools/llvm-pdbdump/PrettyVariableDumper.h (contents, props changed) vendor/llvm/dist/tools/llvm-xray/func-id-helper.cc (contents, props changed) vendor/llvm/dist/tools/llvm-xray/func-id-helper.h (contents, props changed) vendor/llvm/dist/tools/llvm-xray/xray-account.cc (contents, props changed) vendor/llvm/dist/tools/llvm-xray/xray-account.h (contents, props changed) vendor/llvm/dist/tools/llvm-xray/xray-converter.cc (contents, props changed) vendor/llvm/dist/tools/llvm-xray/xray-converter.h (contents, props changed) vendor/llvm/dist/tools/llvm-xray/xray-record-yaml.h (contents, props changed) vendor/llvm/dist/unittests/Support/TarWriterTest.cpp (contents, props changed) vendor/llvm/dist/unittests/Transforms/Scalar/ vendor/llvm/dist/unittests/Transforms/Scalar/CMakeLists.txt (contents, props changed) vendor/llvm/dist/unittests/Transforms/Scalar/LoopPassManagerTest.cpp (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/ vendor/llvm/dist/utils/unittest/googlemock/LICENSE.txt (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/README.LLVM vendor/llvm/dist/utils/unittest/googlemock/include/ vendor/llvm/dist/utils/unittest/googlemock/include/gmock/ vendor/llvm/dist/utils/unittest/googlemock/include/gmock/gmock-actions.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/gmock-cardinalities.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/gmock-generated-actions.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/gmock-generated-function-mockers.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/gmock-generated-matchers.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/gmock-generated-nice-strict.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/gmock-matchers.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/gmock-more-actions.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/gmock-more-matchers.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/gmock-spec-builders.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/gmock.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/internal/ vendor/llvm/dist/utils/unittest/googlemock/include/gmock/internal/custom/ vendor/llvm/dist/utils/unittest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/internal/custom/gmock-matchers.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/internal/custom/gmock-port.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/internal/gmock-generated-internal-utils.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/internal/gmock-internal-utils.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/include/gmock/internal/gmock-port.h (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/src/ vendor/llvm/dist/utils/unittest/googlemock/src/gmock-all.cc (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/src/gmock-cardinalities.cc (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/src/gmock-internal-utils.cc (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/src/gmock-matchers.cc (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/src/gmock-spec-builders.cc (contents, props changed) vendor/llvm/dist/utils/unittest/googlemock/src/gmock.cc (contents, props changed) Deleted: vendor/llvm/dist/include/llvm/Analysis/LoopPassManager.h vendor/llvm/dist/include/llvm/DebugInfo/CodeView/TypeDumper.h vendor/llvm/dist/lib/Analysis/LoopPassManager.cpp vendor/llvm/dist/lib/DebugInfo/CodeView/TypeDumper.cpp vendor/llvm/dist/test/CodeGen/AMDGPU/fp16_to_fp.ll vendor/llvm/dist/test/CodeGen/X86/atom-bypass-slow-division-64.ll vendor/llvm/dist/test/CodeGen/X86/atom-bypass-slow-division.ll vendor/llvm/dist/test/CodeGen/X86/slow-div.ll vendor/llvm/dist/test/FileCheck/strict-whitespace-match-full-lines.txt vendor/llvm/dist/test/tools/llvm-xray/X86/bad-instrmap-sizes.bin vendor/llvm/dist/tools/llvm-pdbdump/BuiltinDumper.cpp vendor/llvm/dist/tools/llvm-pdbdump/BuiltinDumper.h vendor/llvm/dist/tools/llvm-pdbdump/ClassDefinitionDumper.cpp vendor/llvm/dist/tools/llvm-pdbdump/ClassDefinitionDumper.h vendor/llvm/dist/tools/llvm-pdbdump/CompilandDumper.cpp vendor/llvm/dist/tools/llvm-pdbdump/CompilandDumper.h vendor/llvm/dist/tools/llvm-pdbdump/EnumDumper.cpp vendor/llvm/dist/tools/llvm-pdbdump/EnumDumper.h vendor/llvm/dist/tools/llvm-pdbdump/ExternalSymbolDumper.cpp vendor/llvm/dist/tools/llvm-pdbdump/ExternalSymbolDumper.h vendor/llvm/dist/tools/llvm-pdbdump/FunctionDumper.cpp vendor/llvm/dist/tools/llvm-pdbdump/FunctionDumper.h vendor/llvm/dist/tools/llvm-pdbdump/TypeDumper.cpp vendor/llvm/dist/tools/llvm-pdbdump/TypeDumper.h vendor/llvm/dist/tools/llvm-pdbdump/TypedefDumper.cpp vendor/llvm/dist/tools/llvm-pdbdump/TypedefDumper.h vendor/llvm/dist/tools/llvm-pdbdump/VariableDumper.cpp vendor/llvm/dist/tools/llvm-pdbdump/VariableDumper.h vendor/llvm/dist/unittests/Analysis/LoopPassManagerTest.cpp Modified: vendor/llvm/dist/CMakeLists.txt vendor/llvm/dist/LICENSE.TXT vendor/llvm/dist/cmake/modules/AddLLVM.cmake vendor/llvm/dist/cmake/modules/HandleLLVMOptions.cmake vendor/llvm/dist/docs/LangRef.rst vendor/llvm/dist/docs/ReleaseNotes.rst vendor/llvm/dist/include/llvm/ADT/PointerSumType.h vendor/llvm/dist/include/llvm/ADT/iterator.h vendor/llvm/dist/include/llvm/Analysis/AssumptionCache.h vendor/llvm/dist/include/llvm/Analysis/IVUsers.h vendor/llvm/dist/include/llvm/Analysis/LazyCallGraph.h vendor/llvm/dist/include/llvm/Analysis/LoopAccessAnalysis.h vendor/llvm/dist/include/llvm/Analysis/LoopInfo.h vendor/llvm/dist/include/llvm/Analysis/MemoryDependenceAnalysis.h vendor/llvm/dist/include/llvm/Analysis/TargetTransformInfo.h vendor/llvm/dist/include/llvm/Analysis/TargetTransformInfoImpl.h vendor/llvm/dist/include/llvm/Analysis/ValueTracking.h vendor/llvm/dist/include/llvm/CodeGen/BasicTTIImpl.h vendor/llvm/dist/include/llvm/CodeGen/DIE.h vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegBankSelect.h vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegisterBank.h vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h vendor/llvm/dist/include/llvm/CodeGen/ISDOpcodes.h vendor/llvm/dist/include/llvm/CodeGen/SelectionDAG.h vendor/llvm/dist/include/llvm/CodeGen/SelectionDAGNodes.h vendor/llvm/dist/include/llvm/DebugInfo/CodeView/SymbolDumper.h vendor/llvm/dist/include/llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h vendor/llvm/dist/include/llvm/DebugInfo/DWARF/DWARFDie.h vendor/llvm/dist/include/llvm/DebugInfo/DWARF/DWARFFormValue.h vendor/llvm/dist/include/llvm/DebugInfo/MSF/StreamArray.h vendor/llvm/dist/include/llvm/IR/DIBuilder.h vendor/llvm/dist/include/llvm/IR/DebugInfoMetadata.h vendor/llvm/dist/include/llvm/IR/GlobalObject.h vendor/llvm/dist/include/llvm/IR/Intrinsics.td vendor/llvm/dist/include/llvm/IR/IntrinsicsAArch64.td vendor/llvm/dist/include/llvm/IR/IntrinsicsARM.td vendor/llvm/dist/include/llvm/IR/ModuleSummaryIndex.h vendor/llvm/dist/include/llvm/IR/ModuleSummaryIndexYAML.h vendor/llvm/dist/include/llvm/ObjectYAML/DWARFYAML.h vendor/llvm/dist/include/llvm/ObjectYAML/MachOYAML.h vendor/llvm/dist/include/llvm/Passes/PassBuilder.h vendor/llvm/dist/include/llvm/ProfileData/InstrProf.h vendor/llvm/dist/include/llvm/Support/CommandLine.h vendor/llvm/dist/include/llvm/Support/Dwarf.h vendor/llvm/dist/include/llvm/Support/FileOutputBuffer.h vendor/llvm/dist/include/llvm/Support/GenericDomTree.h vendor/llvm/dist/include/llvm/Target/TargetLowering.h vendor/llvm/dist/include/llvm/Target/TargetMachine.h vendor/llvm/dist/include/llvm/Target/TargetSelectionDAG.td vendor/llvm/dist/include/llvm/Target/TargetSubtargetInfo.h vendor/llvm/dist/include/llvm/Transforms/Scalar/IndVarSimplify.h vendor/llvm/dist/include/llvm/Transforms/Scalar/LICM.h vendor/llvm/dist/include/llvm/Transforms/Scalar/LoopDeletion.h vendor/llvm/dist/include/llvm/Transforms/Scalar/LoopIdiomRecognize.h vendor/llvm/dist/include/llvm/Transforms/Scalar/LoopInstSimplify.h vendor/llvm/dist/include/llvm/Transforms/Scalar/LoopRotation.h vendor/llvm/dist/include/llvm/Transforms/Scalar/LoopSimplifyCFG.h vendor/llvm/dist/include/llvm/Transforms/Scalar/LoopStrengthReduce.h vendor/llvm/dist/include/llvm/Transforms/Scalar/LoopUnrollPass.h vendor/llvm/dist/include/llvm/Transforms/Utils/LoopUtils.h vendor/llvm/dist/include/llvm/Transforms/Utils/UnrollLoop.h vendor/llvm/dist/include/llvm/Transforms/Vectorize/LoopVectorize.h vendor/llvm/dist/lib/Analysis/AssumptionCache.cpp vendor/llvm/dist/lib/Analysis/CMakeLists.txt vendor/llvm/dist/lib/Analysis/CostModel.cpp vendor/llvm/dist/lib/Analysis/IVUsers.cpp vendor/llvm/dist/lib/Analysis/InlineCost.cpp vendor/llvm/dist/lib/Analysis/InstructionSimplify.cpp vendor/llvm/dist/lib/Analysis/LazyValueInfo.cpp vendor/llvm/dist/lib/Analysis/LoopAccessAnalysis.cpp vendor/llvm/dist/lib/Analysis/LoopInfo.cpp vendor/llvm/dist/lib/Analysis/LoopPass.cpp vendor/llvm/dist/lib/Analysis/MemoryDependenceAnalysis.cpp vendor/llvm/dist/lib/Analysis/ScalarEvolution.cpp vendor/llvm/dist/lib/Analysis/TargetTransformInfo.cpp vendor/llvm/dist/lib/Analysis/ValueTracking.cpp vendor/llvm/dist/lib/CMakeLists.txt vendor/llvm/dist/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp vendor/llvm/dist/lib/CodeGen/AsmPrinter/DIE.cpp vendor/llvm/dist/lib/CodeGen/AsmPrinter/DwarfUnit.cpp vendor/llvm/dist/lib/CodeGen/GlobalISel/RegBankSelect.cpp vendor/llvm/dist/lib/CodeGen/GlobalISel/RegisterBank.cpp vendor/llvm/dist/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp vendor/llvm/dist/lib/CodeGen/MachineInstr.cpp vendor/llvm/dist/lib/CodeGen/PeepholeOptimizer.cpp vendor/llvm/dist/lib/CodeGen/ScheduleDAG.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/DAGCombiner.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeTypes.h vendor/llvm/dist/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.h vendor/llvm/dist/lib/CodeGen/SelectionDAG/SelectionDAG.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp vendor/llvm/dist/lib/CodeGen/SelectionDAG/TargetLowering.cpp vendor/llvm/dist/lib/DebugInfo/CodeView/CMakeLists.txt vendor/llvm/dist/lib/DebugInfo/CodeView/SymbolDumper.cpp vendor/llvm/dist/lib/DebugInfo/DWARF/DWARFAbbreviationDeclaration.cpp vendor/llvm/dist/lib/DebugInfo/DWARF/DWARFContext.cpp vendor/llvm/dist/lib/DebugInfo/DWARF/DWARFDebugInfoEntry.cpp vendor/llvm/dist/lib/DebugInfo/DWARF/DWARFDie.cpp vendor/llvm/dist/lib/DebugInfo/DWARF/DWARFFormValue.cpp vendor/llvm/dist/lib/DebugInfo/DWARF/DWARFUnit.cpp vendor/llvm/dist/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp vendor/llvm/dist/lib/IR/AutoUpgrade.cpp vendor/llvm/dist/lib/IR/DIBuilder.cpp vendor/llvm/dist/lib/IR/Globals.cpp vendor/llvm/dist/lib/IR/LLVMContextImpl.h vendor/llvm/dist/lib/LTO/LTOBackend.cpp vendor/llvm/dist/lib/LTO/ThinLTOCodeGenerator.cpp vendor/llvm/dist/lib/Object/CMakeLists.txt vendor/llvm/dist/lib/ObjectYAML/DWARFYAML.cpp vendor/llvm/dist/lib/Passes/PassBuilder.cpp vendor/llvm/dist/lib/ProfileData/InstrProf.cpp vendor/llvm/dist/lib/Support/FileOutputBuffer.cpp vendor/llvm/dist/lib/Support/Host.cpp vendor/llvm/dist/lib/Support/TarWriter.cpp vendor/llvm/dist/lib/Target/AArch64/AArch64GenRegisterBankInfo.def vendor/llvm/dist/lib/Target/AArch64/AArch64ISelLowering.cpp vendor/llvm/dist/lib/Target/AArch64/AArch64InstrInfo.td vendor/llvm/dist/lib/Target/AArch64/AArch64RegisterBankInfo.cpp vendor/llvm/dist/lib/Target/AArch64/AArch64TargetTransformInfo.cpp vendor/llvm/dist/lib/Target/AArch64/AArch64TargetTransformInfo.h vendor/llvm/dist/lib/Target/AMDGPU/AMDGPUISelLowering.cpp vendor/llvm/dist/lib/Target/AMDGPU/AMDGPUISelLowering.h vendor/llvm/dist/lib/Target/AMDGPU/AMDGPUInstructions.td vendor/llvm/dist/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp vendor/llvm/dist/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.h vendor/llvm/dist/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp vendor/llvm/dist/lib/Target/AMDGPU/EvergreenInstructions.td vendor/llvm/dist/lib/Target/AMDGPU/SIFoldOperands.cpp vendor/llvm/dist/lib/Target/AMDGPU/SIInstrInfo.td vendor/llvm/dist/lib/Target/AMDGPU/SIInstructions.td vendor/llvm/dist/lib/Target/AMDGPU/SIShrinkInstructions.cpp vendor/llvm/dist/lib/Target/AMDGPU/VOP1Instructions.td vendor/llvm/dist/lib/Target/AMDGPU/VOP2Instructions.td vendor/llvm/dist/lib/Target/AMDGPU/VOPCInstructions.td vendor/llvm/dist/lib/Target/ARM/ARMISelLowering.cpp vendor/llvm/dist/lib/Target/ARM/ARMISelLowering.h vendor/llvm/dist/lib/Target/ARM/ARMRegisterBankInfo.cpp vendor/llvm/dist/lib/Target/ARM/ARMTargetTransformInfo.cpp vendor/llvm/dist/lib/Target/ARM/ARMTargetTransformInfo.h vendor/llvm/dist/lib/Target/Lanai/LanaiTargetTransformInfo.h vendor/llvm/dist/lib/Target/Mips/MipsSEISelLowering.cpp vendor/llvm/dist/lib/Target/NVPTX/ManagedStringPool.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXAsmPrinter.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXAsmPrinter.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXISelLowering.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXInstrInfo.td vendor/llvm/dist/lib/Target/NVPTX/NVPTXSection.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXTargetMachine.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXTargetObjectFile.h vendor/llvm/dist/lib/Target/NVPTX/NVPTXTargetTransformInfo.cpp vendor/llvm/dist/lib/Target/NVPTX/NVPTXTargetTransformInfo.h vendor/llvm/dist/lib/Target/PowerPC/PPCTargetTransformInfo.cpp vendor/llvm/dist/lib/Target/PowerPC/PPCTargetTransformInfo.h vendor/llvm/dist/lib/Target/SystemZ/SystemZISelLowering.cpp vendor/llvm/dist/lib/Target/TargetMachine.cpp vendor/llvm/dist/lib/Target/WebAssembly/WebAssemblyFastISel.cpp vendor/llvm/dist/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp vendor/llvm/dist/lib/Target/WebAssembly/WebAssemblyTargetTransformInfo.cpp vendor/llvm/dist/lib/Target/WebAssembly/WebAssemblyTargetTransformInfo.h vendor/llvm/dist/lib/Target/X86/X86.td vendor/llvm/dist/lib/Target/X86/X86ISelDAGToDAG.cpp vendor/llvm/dist/lib/Target/X86/X86ISelLowering.cpp vendor/llvm/dist/lib/Target/X86/X86InstrAVX512.td vendor/llvm/dist/lib/Target/X86/X86InstrSSE.td vendor/llvm/dist/lib/Target/X86/X86Subtarget.h vendor/llvm/dist/lib/Target/X86/X86TargetTransformInfo.cpp vendor/llvm/dist/lib/Target/X86/X86TargetTransformInfo.h vendor/llvm/dist/lib/Transforms/IPO/LowerTypeTests.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineAddSub.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineCalls.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineInternal.h vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombinePHI.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstCombineShifts.cpp vendor/llvm/dist/lib/Transforms/InstCombine/InstructionCombining.cpp vendor/llvm/dist/lib/Transforms/Instrumentation/AddressSanitizer.cpp vendor/llvm/dist/lib/Transforms/Instrumentation/InstrProfiling.cpp vendor/llvm/dist/lib/Transforms/Instrumentation/PGOInstrumentation.cpp vendor/llvm/dist/lib/Transforms/Scalar/CMakeLists.txt vendor/llvm/dist/lib/Transforms/Scalar/IndVarSimplify.cpp vendor/llvm/dist/lib/Transforms/Scalar/LICM.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopDeletion.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopDistribute.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopIdiomRecognize.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopInstSimplify.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopRotation.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopSimplifyCFG.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopSink.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopStrengthReduce.cpp vendor/llvm/dist/lib/Transforms/Scalar/LoopUnrollPass.cpp vendor/llvm/dist/lib/Transforms/Scalar/NewGVN.cpp vendor/llvm/dist/lib/Transforms/Scalar/StructurizeCFG.cpp vendor/llvm/dist/lib/Transforms/Utils/LoopUnroll.cpp vendor/llvm/dist/lib/Transforms/Utils/LoopUnrollRuntime.cpp vendor/llvm/dist/lib/Transforms/Utils/LoopUtils.cpp vendor/llvm/dist/lib/Transforms/Utils/SimplifyCFG.cpp vendor/llvm/dist/lib/Transforms/Utils/SimplifyLibCalls.cpp vendor/llvm/dist/lib/Transforms/Vectorize/LoopVectorize.cpp vendor/llvm/dist/lib/Transforms/Vectorize/SLPVectorizer.cpp vendor/llvm/dist/runtimes/CMakeLists.txt vendor/llvm/dist/test/Analysis/CostModel/AArch64/store.ll vendor/llvm/dist/test/Analysis/CostModel/X86/strided-load-i16.ll vendor/llvm/dist/test/Analysis/CostModel/X86/strided-load-i32.ll vendor/llvm/dist/test/Analysis/CostModel/X86/strided-load-i64.ll vendor/llvm/dist/test/Analysis/CostModel/X86/strided-load-i8.ll vendor/llvm/dist/test/Analysis/CostModel/X86/vshift-ashr-cost.ll vendor/llvm/dist/test/Analysis/CostModel/X86/vshift-lshr-cost.ll vendor/llvm/dist/test/Analysis/CostModel/X86/vshift-shl-cost.ll vendor/llvm/dist/test/Analysis/ScalarEvolution/max-trip-count.ll vendor/llvm/dist/test/CodeGen/AArch64/arm64-neon-copy.ll vendor/llvm/dist/test/CodeGen/AArch64/arm64-nvcast.ll vendor/llvm/dist/test/CodeGen/AArch64/bitreverse.ll vendor/llvm/dist/test/CodeGen/AArch64/rbit.ll vendor/llvm/dist/test/CodeGen/AMDGPU/fmul-2-combine-multi-use.ll vendor/llvm/dist/test/CodeGen/AMDGPU/fp32_to_fp16.ll vendor/llvm/dist/test/CodeGen/AMDGPU/insert_vector_elt.ll vendor/llvm/dist/test/CodeGen/AMDGPU/local-stack-slot-bug.ll vendor/llvm/dist/test/CodeGen/AMDGPU/mad-combine.ll vendor/llvm/dist/test/CodeGen/AMDGPU/sext-in-reg.ll vendor/llvm/dist/test/CodeGen/AMDGPU/v_mac.ll vendor/llvm/dist/test/CodeGen/ARM/fp16-promote.ll vendor/llvm/dist/test/CodeGen/ARM/fpcmp_ueq.ll vendor/llvm/dist/test/CodeGen/ARM/vdup.ll vendor/llvm/dist/test/CodeGen/ARM/vpadd.ll vendor/llvm/dist/test/CodeGen/ARM/vtrn.ll vendor/llvm/dist/test/CodeGen/Mips/llvm-ir/extractelement.ll vendor/llvm/dist/test/CodeGen/NVPTX/fast-math.ll vendor/llvm/dist/test/CodeGen/PowerPC/variable_elem_vec_extracts.ll vendor/llvm/dist/test/CodeGen/WebAssembly/function-bitcasts.ll vendor/llvm/dist/test/CodeGen/X86/atomic-eflags-reuse.ll vendor/llvm/dist/test/CodeGen/X86/avx-cvt.ll vendor/llvm/dist/test/CodeGen/X86/avx-trunc.ll vendor/llvm/dist/test/CodeGen/X86/avx512-cvt.ll vendor/llvm/dist/test/CodeGen/X86/avx512-select.ll vendor/llvm/dist/test/CodeGen/X86/avx512-trunc.ll vendor/llvm/dist/test/CodeGen/X86/cmp.ll vendor/llvm/dist/test/CodeGen/X86/cpus.ll vendor/llvm/dist/test/CodeGen/X86/extractelement-index.ll vendor/llvm/dist/test/CodeGen/X86/extractelement-legalization-store-ordering.ll vendor/llvm/dist/test/CodeGen/X86/i64-mem-copy.ll vendor/llvm/dist/test/CodeGen/X86/implicit-null-checks.mir vendor/llvm/dist/test/CodeGen/X86/lzcnt-zext-cmp.ll vendor/llvm/dist/test/CodeGen/X86/slow-unaligned-mem.ll vendor/llvm/dist/test/CodeGen/X86/sse2-intrinsics-fast-isel.ll vendor/llvm/dist/test/CodeGen/X86/vec_ins_extract-1.ll vendor/llvm/dist/test/CodeGen/X86/vec_insert-4.ll vendor/llvm/dist/test/CodeGen/X86/vec_insert-8.ll vendor/llvm/dist/test/CodeGen/X86/vec_int_to_fp.ll vendor/llvm/dist/test/CodeGen/X86/vector-shift-ashr-128.ll vendor/llvm/dist/test/CodeGen/X86/vector-shift-ashr-256.ll vendor/llvm/dist/test/CodeGen/X86/vector-shift-ashr-512.ll vendor/llvm/dist/test/CodeGen/X86/vector-shift-lshr-128.ll vendor/llvm/dist/test/CodeGen/X86/vector-shift-lshr-256.ll vendor/llvm/dist/test/CodeGen/X86/vector-shift-lshr-512.ll vendor/llvm/dist/test/CodeGen/X86/vector-shift-shl-128.ll vendor/llvm/dist/test/CodeGen/X86/vector-shift-shl-256.ll vendor/llvm/dist/test/CodeGen/X86/vector-shift-shl-512.ll vendor/llvm/dist/test/CodeGen/X86/vector-shuffle-combining-xop.ll vendor/llvm/dist/test/CodeGen/X86/vector-shuffle-variable-128.ll vendor/llvm/dist/test/CodeGen/X86/vector-shuffle-variable-256.ll vendor/llvm/dist/test/CodeGen/X86/x86-64-double-shifts-var.ll vendor/llvm/dist/test/DebugInfo/Generic/simplifycfg_sink_last_inst.ll vendor/llvm/dist/test/ExecutionEngine/RuntimeDyld/AArch64/ELF_ARM64_BE-relocations.s vendor/llvm/dist/test/ExecutionEngine/RuntimeDyld/AArch64/ELF_ARM64_relocations.s vendor/llvm/dist/test/Instrumentation/AddressSanitizer/global_metadata_darwin.ll vendor/llvm/dist/test/MC/AMDGPU/vop_dpp.s vendor/llvm/dist/test/MC/AMDGPU/vop_sdwa.s vendor/llvm/dist/test/MC/ARM/directive-object_arch-2.s vendor/llvm/dist/test/MC/ARM/directive-object_arch.s vendor/llvm/dist/test/ObjectYAML/MachO/DWARF-debug_info.yaml vendor/llvm/dist/test/Other/loop-pass-ordering.ll vendor/llvm/dist/test/Other/new-pass-manager.ll vendor/llvm/dist/test/Other/pass-pipeline-parsing.ll vendor/llvm/dist/test/Transforms/GVN/assume-equal.ll vendor/llvm/dist/test/Transforms/GVN/invariant.group.ll vendor/llvm/dist/test/Transforms/InstCombine/fabs.ll vendor/llvm/dist/test/Transforms/InstCombine/fast-math.ll vendor/llvm/dist/test/Transforms/InstCombine/fdiv.ll vendor/llvm/dist/test/Transforms/InstCombine/pow-4.ll vendor/llvm/dist/test/Transforms/InstCombine/pow-sqrt.ll vendor/llvm/dist/test/Transforms/InstSimplify/floating-point-arithmetic.ll vendor/llvm/dist/test/Transforms/LICM/argmemonly-call.ll vendor/llvm/dist/test/Transforms/LICM/assume.ll vendor/llvm/dist/test/Transforms/LICM/atomics.ll vendor/llvm/dist/test/Transforms/LICM/basictest.ll vendor/llvm/dist/test/Transforms/LICM/constexpr.ll vendor/llvm/dist/test/Transforms/LICM/crash.ll vendor/llvm/dist/test/Transforms/LICM/debug-value.ll vendor/llvm/dist/test/Transforms/LICM/extra-copies.ll vendor/llvm/dist/test/Transforms/LICM/funclet.ll vendor/llvm/dist/test/Transforms/LICM/hoist-bitcast-load.ll vendor/llvm/dist/test/Transforms/LICM/hoist-deref-load.ll vendor/llvm/dist/test/Transforms/LICM/hoist-nounwind.ll vendor/llvm/dist/test/Transforms/LICM/hoist-round.ll vendor/llvm/dist/test/Transforms/LICM/hoisting.ll vendor/llvm/dist/test/Transforms/LICM/lcssa-ssa-promoter.ll vendor/llvm/dist/test/Transforms/LICM/no-preheader-test.ll vendor/llvm/dist/test/Transforms/LICM/preheader-safe.ll vendor/llvm/dist/test/Transforms/LICM/promote-order.ll vendor/llvm/dist/test/Transforms/LICM/promote-tls.ll vendor/llvm/dist/test/Transforms/LICM/scalar-promote-memmodel.ll vendor/llvm/dist/test/Transforms/LICM/scalar_promote-unwind.ll vendor/llvm/dist/test/Transforms/LICM/scalar_promote.ll vendor/llvm/dist/test/Transforms/LICM/speculate.ll vendor/llvm/dist/test/Transforms/LICM/volatile-alias.ll vendor/llvm/dist/test/Transforms/LoopSimplify/preserve-scev.ll vendor/llvm/dist/test/Transforms/LoopUnroll/peel-loop-pgo.ll vendor/llvm/dist/test/Transforms/LowerTypeTests/Inputs/import-unsat.yaml vendor/llvm/dist/test/Transforms/LowerTypeTests/function.ll vendor/llvm/dist/test/Transforms/LowerTypeTests/import-unsat.ll vendor/llvm/dist/test/Transforms/LowerTypeTests/simple.ll vendor/llvm/dist/test/Transforms/NewGVN/assume-equal.ll vendor/llvm/dist/test/Transforms/NewGVN/invariant.group.ll vendor/llvm/dist/test/Transforms/PGOProfile/comdat_internal.ll vendor/llvm/dist/test/Transforms/PGOProfile/comdat_rename.ll vendor/llvm/dist/test/Transforms/PGOProfile/indirect_call_profile.ll vendor/llvm/dist/test/Transforms/StructurizeCFG/no-branch-to-entry.ll vendor/llvm/dist/tools/dsymutil/DwarfLinker.cpp vendor/llvm/dist/tools/llvm-config/BuildVariables.inc.in vendor/llvm/dist/tools/llvm-config/CMakeLists.txt vendor/llvm/dist/tools/llvm-config/llvm-config.cpp vendor/llvm/dist/tools/llvm-pdbdump/CMakeLists.txt vendor/llvm/dist/tools/llvm-pdbdump/LLVMOutputStyle.cpp vendor/llvm/dist/tools/llvm-pdbdump/LLVMOutputStyle.h vendor/llvm/dist/tools/llvm-pdbdump/YAMLOutputStyle.h vendor/llvm/dist/tools/llvm-pdbdump/llvm-pdbdump.cpp vendor/llvm/dist/tools/llvm-readobj/COFFDumper.cpp vendor/llvm/dist/tools/llvm-xray/CMakeLists.txt vendor/llvm/dist/tools/llvm-xray/xray-extract.cc vendor/llvm/dist/tools/obj2yaml/dwarf2yaml.cpp vendor/llvm/dist/tools/opt/NewPMDriver.cpp vendor/llvm/dist/tools/yaml2obj/yaml2dwarf.cpp vendor/llvm/dist/tools/yaml2obj/yaml2macho.cpp vendor/llvm/dist/tools/yaml2obj/yaml2obj.h vendor/llvm/dist/unittests/Analysis/CMakeLists.txt vendor/llvm/dist/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp vendor/llvm/dist/unittests/IR/DominatorTreeTest.cpp vendor/llvm/dist/unittests/IR/IRBuilderTest.cpp vendor/llvm/dist/unittests/Support/CMakeLists.txt vendor/llvm/dist/unittests/Transforms/CMakeLists.txt vendor/llvm/dist/utils/release/build_llvm_package.bat vendor/llvm/dist/utils/unittest/CMakeLists.txt vendor/llvm/dist/utils/unittest/UnitTestMain/TestMain.cpp Modified: vendor/llvm/dist/CMakeLists.txt ============================================================================== --- vendor/llvm/dist/CMakeLists.txt Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/CMakeLists.txt Sat Jan 14 15:37:50 2017 (r312173) @@ -29,7 +29,7 @@ if(NOT DEFINED LLVM_VERSION_PATCH) set(LLVM_VERSION_PATCH 0) endif() if(NOT DEFINED LLVM_VERSION_SUFFIX) - set(LLVM_VERSION_SUFFIX svn) + set(LLVM_VERSION_SUFFIX "") endif() if (POLICY CMP0048) Modified: vendor/llvm/dist/LICENSE.TXT ============================================================================== --- vendor/llvm/dist/LICENSE.TXT Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/LICENSE.TXT Sat Jan 14 15:37:50 2017 (r312173) @@ -4,7 +4,7 @@ LLVM Release License University of Illinois/NCSA Open Source License -Copyright (c) 2003-2016 University of Illinois at Urbana-Champaign. +Copyright (c) 2003-2017 University of Illinois at Urbana-Champaign. All rights reserved. Developed by: Modified: vendor/llvm/dist/cmake/modules/AddLLVM.cmake ============================================================================== --- vendor/llvm/dist/cmake/modules/AddLLVM.cmake Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/cmake/modules/AddLLVM.cmake Sat Jan 14 15:37:50 2017 (r312173) @@ -1007,6 +1007,7 @@ function(add_unittest test_suite test_na endif() include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include) + include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googlemock/include) if (NOT LLVM_ENABLE_THREADS) list(APPEND LLVM_COMPILE_DEFINITIONS GTEST_HAS_PTHREAD=0) endif () Added: vendor/llvm/dist/cmake/modules/CheckLinkerFlag.cmake ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/llvm/dist/cmake/modules/CheckLinkerFlag.cmake Sat Jan 14 15:37:50 2017 (r312173) @@ -0,0 +1,8 @@ +include(CheckCXXCompilerFlag) + +function(check_linker_flag flag out_var) + set(OLD_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}") + check_cxx_compiler_flag("" ${out_var}) + set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) +endfunction() Modified: vendor/llvm/dist/cmake/modules/HandleLLVMOptions.cmake ============================================================================== --- vendor/llvm/dist/cmake/modules/HandleLLVMOptions.cmake Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/cmake/modules/HandleLLVMOptions.cmake Sat Jan 14 15:37:50 2017 (r312173) @@ -597,6 +597,14 @@ if (UNIX AND append("-fcolor-diagnostics" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) endif() +# lld doesn't print colored diagnostics when invoked from Ninja +if (UNIX AND CMAKE_GENERATOR STREQUAL "Ninja") + include(CheckLinkerFlag) + check_linker_flag("-Wl,-color-diagnostics" LINKER_SUPPORTS_COLOR_DIAGNOSTICS) + append_if(LINKER_SUPPORTS_COLOR_DIAGNOSTICS "-Wl,-color-diagnostics" + CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) +endif() + # Add flags for add_dead_strip(). # FIXME: With MSVS, consider compiling with /Gy and linking with /OPT:REF? # But MinSizeRel seems to add that automatically, so maybe disable these Modified: vendor/llvm/dist/docs/LangRef.rst ============================================================================== --- vendor/llvm/dist/docs/LangRef.rst Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/docs/LangRef.rst Sat Jan 14 15:37:50 2017 (r312173) @@ -2169,8 +2169,9 @@ Fast-Math Flags LLVM IR floating-point binary ops (:ref:`fadd <i_fadd>`, :ref:`fsub <i_fsub>`, :ref:`fmul <i_fmul>`, :ref:`fdiv <i_fdiv>`, -:ref:`frem <i_frem>`, :ref:`fcmp <i_fcmp>`) have the following flags that can -be set to enable otherwise unsafe floating point operations +:ref:`frem <i_frem>`, :ref:`fcmp <i_fcmp>`) and :ref:`call <i_call>` +instructions have the following flags that can be set to enable +otherwise unsafe floating point transformations. ``nnan`` No NaNs - Allow optimizations to assume the arguments and result are not Modified: vendor/llvm/dist/docs/ReleaseNotes.rst ============================================================================== --- vendor/llvm/dist/docs/ReleaseNotes.rst Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/docs/ReleaseNotes.rst Sat Jan 14 15:37:50 2017 (r312173) @@ -26,11 +26,6 @@ have questions or comments, the `LLVM De <http://lists.llvm.org/mailman/listinfo/llvm-dev>`_ is a good place to send them. -Note that if you are reading this file from a Subversion checkout or the main -LLVM web page, this document applies to the *next* release, not the current -one. To see the release notes for a specific release, please see the `releases -page <http://llvm.org/releases/>`_. - Non-comprehensive list of changes in this release ================================================= * The C API functions LLVMAddFunctionAttr, LLVMGetFunctionAttr, @@ -57,6 +52,9 @@ Non-comprehensive list of changes in thi the previously used names should become descriptions and a short name in the style of a programming language identifier should be added. +* LLVM now handles invariant.group across different basic blocks, which makes + it possible to devirtualize virtual calls inside loops. + * ... next change ... .. NOTE Modified: vendor/llvm/dist/include/llvm/ADT/PointerSumType.h ============================================================================== --- vendor/llvm/dist/include/llvm/ADT/PointerSumType.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/ADT/PointerSumType.h Sat Jan 14 15:37:50 2017 (r312173) @@ -94,7 +94,7 @@ public: return HelperT::template Lookup<N>::TraitsT::getFromVoidPointer(getImpl()); } - operator bool() const { return Value & HelperT::PointerMask; } + explicit operator bool() const { return Value & HelperT::PointerMask; } bool operator==(const PointerSumType &R) const { return Value == R.Value; } bool operator!=(const PointerSumType &R) const { return Value != R.Value; } bool operator<(const PointerSumType &R) const { return Value < R.Value; } Modified: vendor/llvm/dist/include/llvm/ADT/iterator.h ============================================================================== --- vendor/llvm/dist/include/llvm/ADT/iterator.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/ADT/iterator.h Sat Jan 14 15:37:50 2017 (r312173) @@ -33,6 +33,32 @@ namespace llvm { /// Another abstraction that this doesn't provide is implementing increment in /// terms of addition of one. These aren't equivalent for all iterator /// categories, and respecting that adds a lot of complexity for little gain. +/// +/// Classes wishing to use `iterator_facade_base` should implement the following +/// methods: +/// +/// Forward Iterators: +/// (All of the following methods) +/// - DerivedT &operator=(const DerivedT &R); +/// - bool operator==(const DerivedT &R) const; +/// - const T &operator*() const; +/// - T &operator*(); +/// - DerivedT &operator++(); +/// +/// Bidirectional Iterators: +/// (All methods of forward iterators, plus the following) +/// - DerivedT &operator--(); +/// +/// Random-access Iterators: +/// (All methods of bidirectional iterators excluding the following) +/// - DerivedT &operator++(); +/// - DerivedT &operator--(); +/// (and plus the following) +/// - bool operator<(const DerivedT &RHS) const; +/// - DifferenceTypeT operator-(const DerivedT &R) const; +/// - DerivedT &operator+=(DifferenceTypeT N); +/// - DerivedT &operator-=(DifferenceTypeT N); +/// template <typename DerivedT, typename IteratorCategoryT, typename T, typename DifferenceTypeT = std::ptrdiff_t, typename PointerT = T *, typename ReferenceT = T &> Modified: vendor/llvm/dist/include/llvm/Analysis/AssumptionCache.h ============================================================================== --- vendor/llvm/dist/include/llvm/Analysis/AssumptionCache.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/Analysis/AssumptionCache.h Sat Jan 14 15:37:50 2017 (r312173) @@ -46,6 +46,30 @@ class AssumptionCache { /// intrinsic. SmallVector<WeakVH, 4> AssumeHandles; + class AffectedValueCallbackVH final : public CallbackVH { + AssumptionCache *AC; + void deleted() override; + void allUsesReplacedWith(Value *) override; + + public: + using DMI = DenseMapInfo<Value *>; + + AffectedValueCallbackVH(Value *V, AssumptionCache *AC = nullptr) + : CallbackVH(V), AC(AC) {} + }; + + friend AffectedValueCallbackVH; + + /// \brief A map of values about which an assumption might be providing + /// information to the relevant set of assumptions. + using AffectedValuesMap = + DenseMap<AffectedValueCallbackVH, SmallVector<WeakVH, 1>, + AffectedValueCallbackVH::DMI>; + AffectedValuesMap AffectedValues; + + /// Get the vector of assumptions which affect a value from the cache. + SmallVector<WeakVH, 1> &getAffectedValues(Value *V); + /// \brief Flag tracking whether we have scanned the function yet. /// /// We want to be as lazy about this as possible, and so we scan the function @@ -66,11 +90,16 @@ public: /// not already be in the cache. void registerAssumption(CallInst *CI); + /// \brief Update the cache of values being affected by this assumption (i.e. + /// the values about which this assumption provides information). + void updateAffectedValues(CallInst *CI); + /// \brief Clear the cache of @llvm.assume intrinsics for a function. /// /// It will be re-scanned the next time it is requested. void clear() { AssumeHandles.clear(); + AffectedValues.clear(); Scanned = false; } @@ -87,6 +116,18 @@ public: scanFunction(); return AssumeHandles; } + + /// \brief Access the list of assumptions which affect this value. + MutableArrayRef<WeakVH> assumptionsFor(const Value *V) { + if (!Scanned) + scanFunction(); + + auto AVI = AffectedValues.find_as(const_cast<Value *>(V)); + if (AVI == AffectedValues.end()) + return MutableArrayRef<WeakVH>(); + + return AVI->second; + } }; /// \brief A function analysis which provides an \c AssumptionCache. Modified: vendor/llvm/dist/include/llvm/Analysis/IVUsers.h ============================================================================== --- vendor/llvm/dist/include/llvm/Analysis/IVUsers.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/Analysis/IVUsers.h Sat Jan 14 15:37:50 2017 (r312173) @@ -15,8 +15,8 @@ #ifndef LLVM_ANALYSIS_IVUSERS_H #define LLVM_ANALYSIS_IVUSERS_H +#include "llvm/Analysis/LoopAnalysisManager.h" #include "llvm/Analysis/LoopPass.h" -#include "llvm/Analysis/LoopPassManager.h" #include "llvm/Analysis/ScalarEvolutionNormalization.h" #include "llvm/IR/ValueHandle.h" @@ -193,17 +193,10 @@ class IVUsersAnalysis : public AnalysisI public: typedef IVUsers Result; - IVUsers run(Loop &L, LoopAnalysisManager &AM); + IVUsers run(Loop &L, LoopAnalysisManager &AM, + LoopStandardAnalysisResults &AR); }; -/// Printer pass for the \c IVUsers for a loop. -class IVUsersPrinterPass : public PassInfoMixin<IVUsersPrinterPass> { - raw_ostream &OS; - -public: - explicit IVUsersPrinterPass(raw_ostream &OS) : OS(OS) {} - PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM); -}; } #endif Modified: vendor/llvm/dist/include/llvm/Analysis/LazyCallGraph.h ============================================================================== --- vendor/llvm/dist/include/llvm/Analysis/LazyCallGraph.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/Analysis/LazyCallGraph.h Sat Jan 14 15:37:50 2017 (r312173) @@ -148,7 +148,7 @@ public: /// /// This happens when an edge has been deleted. We leave the edge objects /// around but clear them. - operator bool() const; + explicit operator bool() const; /// Returnss the \c Kind of the edge. Kind getKind() const; Modified: vendor/llvm/dist/include/llvm/Analysis/LoopAccessAnalysis.h ============================================================================== --- vendor/llvm/dist/include/llvm/Analysis/LoopAccessAnalysis.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/Analysis/LoopAccessAnalysis.h Sat Jan 14 15:37:50 2017 (r312173) @@ -20,7 +20,7 @@ #include "llvm/ADT/SetVector.h" #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Analysis/AliasSetTracker.h" -#include "llvm/Analysis/LoopPassManager.h" +#include "llvm/Analysis/LoopAnalysisManager.h" #include "llvm/Analysis/ScalarEvolutionExpressions.h" #include "llvm/IR/DiagnosticInfo.h" #include "llvm/IR/ValueHandle.h" @@ -753,18 +753,8 @@ class LoopAccessAnalysis public: typedef LoopAccessInfo Result; - Result run(Loop &, LoopAnalysisManager &); - static StringRef name() { return "LoopAccessAnalysis"; } -}; - -/// \brief Printer pass for the \c LoopAccessInfo results. -class LoopAccessInfoPrinterPass - : public PassInfoMixin<LoopAccessInfoPrinterPass> { - raw_ostream &OS; -public: - explicit LoopAccessInfoPrinterPass(raw_ostream &OS) : OS(OS) {} - PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM); + Result run(Loop &L, LoopAnalysisManager &AM, LoopStandardAnalysisResults &AR); }; inline Instruction *MemoryDepChecker::Dependence::getSource( Added: vendor/llvm/dist/include/llvm/Analysis/LoopAnalysisManager.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/llvm/dist/include/llvm/Analysis/LoopAnalysisManager.h Sat Jan 14 15:37:50 2017 (r312173) @@ -0,0 +1,155 @@ +//===- LoopAnalysisManager.h - Loop analysis management ---------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// \file +/// +/// This header provides classes for managing per-loop analyses. These are +/// typically used as part of a loop pass pipeline over the loop nests of +/// a function. +/// +/// Loop analyses are allowed to make some simplifying assumptions: +/// 1) Loops are, where possible, in simplified form. +/// 2) Loops are *always* in LCSSA form. +/// 3) A collection of analysis results are available: +/// - LoopInfo +/// - DominatorTree +/// - ScalarEvolution +/// - AAManager +/// +/// The primary mechanism to provide these invariants is the loop pass manager, +/// but they can also be manually provided in order to reason about a loop from +/// outside of a dedicated pass manager. +/// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_ANALYSIS_LOOPANALYSISMANAGER_H +#define LLVM_ANALYSIS_LOOPANALYSISMANAGER_H + +#include "llvm/ADT/PostOrderIterator.h" +#include "llvm/ADT/PriorityWorklist.h" +#include "llvm/ADT/STLExtras.h" +#include "llvm/Analysis/AliasAnalysis.h" +#include "llvm/Analysis/BasicAliasAnalysis.h" +#include "llvm/Analysis/GlobalsModRef.h" +#include "llvm/Analysis/LoopInfo.h" +#include "llvm/Analysis/ScalarEvolution.h" +#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h" +#include "llvm/Analysis/TargetLibraryInfo.h" +#include "llvm/Analysis/TargetTransformInfo.h" +#include "llvm/IR/Dominators.h" +#include "llvm/IR/PassManager.h" + +namespace llvm { + +/// The adaptor from a function pass to a loop pass computes these analyses and +/// makes them available to the loop passes "for free". Each loop pass is +/// expected expected to update these analyses if necessary to ensure they're +/// valid after it runs. +struct LoopStandardAnalysisResults { + AAResults &AA; + AssumptionCache &AC; + DominatorTree &DT; + LoopInfo &LI; + ScalarEvolution &SE; + TargetLibraryInfo &TLI; + TargetTransformInfo &TTI; +}; + +/// Extern template declaration for the analysis set for this IR unit. +extern template class AllAnalysesOn<Loop>; + +extern template class AnalysisManager<Loop, LoopStandardAnalysisResults &>; +/// \brief The loop analysis manager. +/// +/// See the documentation for the AnalysisManager template for detail +/// documentation. This typedef serves as a convenient way to refer to this +/// construct in the adaptors and proxies used to integrate this into the larger +/// pass manager infrastructure. +typedef AnalysisManager<Loop, LoopStandardAnalysisResults &> + LoopAnalysisManager; + +/// A proxy from a \c LoopAnalysisManager to a \c Function. +typedef InnerAnalysisManagerProxy<LoopAnalysisManager, Function> + LoopAnalysisManagerFunctionProxy; + +/// A specialized result for the \c LoopAnalysisManagerFunctionProxy which +/// retains a \c LoopInfo reference. +/// +/// This allows it to collect loop objects for which analysis results may be +/// cached in the \c LoopAnalysisManager. +template <> class LoopAnalysisManagerFunctionProxy::Result { +public: + explicit Result(LoopAnalysisManager &InnerAM, LoopInfo &LI) + : InnerAM(&InnerAM), LI(&LI) {} + Result(Result &&Arg) : InnerAM(std::move(Arg.InnerAM)), LI(Arg.LI) { + // We have to null out the analysis manager in the moved-from state + // because we are taking ownership of the responsibilty to clear the + // analysis state. + Arg.InnerAM = nullptr; + } + Result &operator=(Result &&RHS) { + InnerAM = RHS.InnerAM; + LI = RHS.LI; + // We have to null out the analysis manager in the moved-from state + // because we are taking ownership of the responsibilty to clear the + // analysis state. + RHS.InnerAM = nullptr; + return *this; + } + ~Result() { + // InnerAM is cleared in a moved from state where there is nothing to do. + if (!InnerAM) + return; + + // Clear out the analysis manager if we're being destroyed -- it means we + // didn't even see an invalidate call when we got invalidated. + InnerAM->clear(); + } + + /// Accessor for the analysis manager. + LoopAnalysisManager &getManager() { return *InnerAM; } + + /// Handler for invalidation of the proxy for a particular function. + /// + /// If the proxy, \c LoopInfo, and associated analyses are preserved, this + /// will merely forward the invalidation event to any cached loop analysis + /// results for loops within this function. + /// + /// If the necessary loop infrastructure is not preserved, this will forcibly + /// clear all of the cached analysis results that are keyed on the \c + /// LoopInfo for this function. + bool invalidate(Function &F, const PreservedAnalyses &PA, + FunctionAnalysisManager::Invalidator &Inv); + +private: + LoopAnalysisManager *InnerAM; + LoopInfo *LI; +}; + +/// Provide a specialized run method for the \c LoopAnalysisManagerFunctionProxy +/// so it can pass the \c LoopInfo to the result. +template <> +LoopAnalysisManagerFunctionProxy::Result +LoopAnalysisManagerFunctionProxy::run(Function &F, FunctionAnalysisManager &AM); + +// Ensure the \c LoopAnalysisManagerFunctionProxy is provided as an extern +// template. +extern template class InnerAnalysisManagerProxy<LoopAnalysisManager, Function>; + +extern template class OuterAnalysisManagerProxy<FunctionAnalysisManager, Loop, + LoopStandardAnalysisResults &>; +/// A proxy from a \c FunctionAnalysisManager to a \c Loop. +typedef OuterAnalysisManagerProxy<FunctionAnalysisManager, Loop, + LoopStandardAnalysisResults &> + FunctionAnalysisManagerLoopProxy; + +/// Returns the minimum set of Analyses that all loop passes must preserve. +PreservedAnalyses getLoopPassPreservedAnalyses(); +} + +#endif // LLVM_ANALYSIS_LOOPANALYSISMANAGER_H Modified: vendor/llvm/dist/include/llvm/Analysis/LoopInfo.h ============================================================================== --- vendor/llvm/dist/include/llvm/Analysis/LoopInfo.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/Analysis/LoopInfo.h Sat Jan 14 15:37:50 2017 (r312173) @@ -853,17 +853,8 @@ public: void getAnalysisUsage(AnalysisUsage &AU) const override; }; -/// \brief Pass for printing a loop's contents as LLVM's text IR assembly. -class PrintLoopPass : public PassInfoMixin<PrintLoopPass> { - raw_ostream &OS; - std::string Banner; - -public: - PrintLoopPass(); - PrintLoopPass(raw_ostream &OS, const std::string &Banner = ""); - - PreservedAnalyses run(Loop &L, AnalysisManager<Loop> &); -}; +/// Function to print a loop's contents as LLVM's text IR assembly. +void printLoop(Loop &L, raw_ostream &OS, const std::string &Banner = ""); } // End llvm namespace Modified: vendor/llvm/dist/include/llvm/Analysis/MemoryDependenceAnalysis.h ============================================================================== --- vendor/llvm/dist/include/llvm/Analysis/MemoryDependenceAnalysis.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/Analysis/MemoryDependenceAnalysis.h Sat Jan 14 15:37:50 2017 (r312173) @@ -302,6 +302,10 @@ private: NonLocalPointerInfo() : Size(MemoryLocation::UnknownSize) {} }; + /// Cache storing single nonlocal def for the instruction. + /// It is set when nonlocal def would be found in function returning only + /// local dependencies. + DenseMap<Instruction *, NonLocalDepResult> NonLocalDefsCache; /// This map stores the cached results of doing a pointer lookup at the /// bottom of a block. /// @@ -441,9 +445,9 @@ public: /// This analysis looks for other loads and stores with invariant.group /// metadata and the same pointer operand. Returns Unknown if it does not /// find anything, and Def if it can be assumed that 2 instructions load or - /// store the same value. - /// FIXME: This analysis works only on single block because of restrictions - /// at the call site. + /// store the same value and NonLocal which indicate that non-local Def was + /// found, which can be retrieved by calling getNonLocalPointerDependency + /// with the same queried instruction. MemDepResult getInvariantGroupPointerDependency(LoadInst *LI, BasicBlock *BB); /// Looks at a memory location for a load (specified by MemLocBase, Offs, and Modified: vendor/llvm/dist/include/llvm/Analysis/TargetTransformInfo.h ============================================================================== --- vendor/llvm/dist/include/llvm/Analysis/TargetTransformInfo.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/Analysis/TargetTransformInfo.h Sat Jan 14 15:37:50 2017 (r312173) @@ -55,6 +55,11 @@ struct MemIntrinsicInfo { // Same Id is set by the target for corresponding load/store intrinsics. unsigned short MatchingId; int NumMemRefs; + + /// This is the pointer that the intrinsic is loading from or storing to. + /// If this is non-null, then analysis/optimization passes can assume that + /// this intrinsic is functionally equivalent to a load/store from this + /// pointer. Value *PtrVal; }; @@ -518,11 +523,15 @@ public: unsigned getMaxInterleaveFactor(unsigned VF) const; /// \return The expected cost of arithmetic ops, such as mul, xor, fsub, etc. + /// \p Args is an optional argument which holds the instruction operands + /// values so the TTI can analyize those values searching for special + /// cases\optimizations based on those values. int getArithmeticInstrCost( unsigned Opcode, Type *Ty, OperandValueKind Opd1Info = OK_AnyValue, OperandValueKind Opd2Info = OK_AnyValue, OperandValueProperties Opd1PropInfo = OP_None, - OperandValueProperties Opd2PropInfo = OP_None) const; + OperandValueProperties Opd2PropInfo = OP_None, + ArrayRef<const Value *> Args = ArrayRef<const Value *>()) const; /// \return The cost of a shuffle instruction of kind Kind and of type Tp. /// The index and subtype parameters are used by the subvector insertion and @@ -763,7 +772,8 @@ public: getArithmeticInstrCost(unsigned Opcode, Type *Ty, OperandValueKind Opd1Info, OperandValueKind Opd2Info, OperandValueProperties Opd1PropInfo, - OperandValueProperties Opd2PropInfo) = 0; + OperandValueProperties Opd2PropInfo, + ArrayRef<const Value *> Args) = 0; virtual int getShuffleCost(ShuffleKind Kind, Type *Tp, int Index, Type *SubTp) = 0; virtual int getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src) = 0; @@ -984,9 +994,10 @@ public: getArithmeticInstrCost(unsigned Opcode, Type *Ty, OperandValueKind Opd1Info, OperandValueKind Opd2Info, OperandValueProperties Opd1PropInfo, - OperandValueProperties Opd2PropInfo) override { + OperandValueProperties Opd2PropInfo, + ArrayRef<const Value *> Args) override { return Impl.getArithmeticInstrCost(Opcode, Ty, Opd1Info, Opd2Info, - Opd1PropInfo, Opd2PropInfo); + Opd1PropInfo, Opd2PropInfo, Args); } int getShuffleCost(ShuffleKind Kind, Type *Tp, int Index, Type *SubTp) override { Modified: vendor/llvm/dist/include/llvm/Analysis/TargetTransformInfoImpl.h ============================================================================== --- vendor/llvm/dist/include/llvm/Analysis/TargetTransformInfoImpl.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/Analysis/TargetTransformInfoImpl.h Sat Jan 14 15:37:50 2017 (r312173) @@ -306,7 +306,8 @@ public: TTI::OperandValueKind Opd1Info, TTI::OperandValueKind Opd2Info, TTI::OperandValueProperties Opd1PropInfo, - TTI::OperandValueProperties Opd2PropInfo) { + TTI::OperandValueProperties Opd2PropInfo, + ArrayRef<const Value *> Args) { return 1; } @@ -427,6 +428,63 @@ public: return VF; } protected: + // Obtain the minimum required size to hold the value (without the sign) + // In case of a vector it returns the min required size for one element. + unsigned minRequiredElementSize(const Value* Val, bool &isSigned) { + if (isa<ConstantDataVector>(Val) || isa<ConstantVector>(Val)) { + const auto* VectorValue = cast<Constant>(Val); + + // In case of a vector need to pick the max between the min + // required size for each element + auto *VT = cast<VectorType>(Val->getType()); + + // Assume unsigned elements + isSigned = false; + + // The max required size is the total vector width divided by num + // of elements in the vector + unsigned MaxRequiredSize = VT->getBitWidth() / VT->getNumElements(); + + unsigned MinRequiredSize = 0; + for(unsigned i = 0, e = VT->getNumElements(); i < e; ++i) { + if (auto* IntElement = + dyn_cast<ConstantInt>(VectorValue->getAggregateElement(i))) { + bool signedElement = IntElement->getValue().isNegative(); + // Get the element min required size. + unsigned ElementMinRequiredSize = + IntElement->getValue().getMinSignedBits() - 1; + // In case one element is signed then all the vector is signed. + isSigned |= signedElement; + // Save the max required bit size between all the elements. + MinRequiredSize = std::max(MinRequiredSize, ElementMinRequiredSize); + } + else { + // not an int constant element + return MaxRequiredSize; + } + } + return MinRequiredSize; + } + + if (const auto* CI = dyn_cast<ConstantInt>(Val)) { + isSigned = CI->getValue().isNegative(); + return CI->getValue().getMinSignedBits() - 1; + } + + if (const auto* Cast = dyn_cast<SExtInst>(Val)) { + isSigned = true; + return Cast->getSrcTy()->getScalarSizeInBits() - 1; + } + + if (const auto* Cast = dyn_cast<ZExtInst>(Val)) { + isSigned = false; + return Cast->getSrcTy()->getScalarSizeInBits(); + } + + isSigned = false; + return Val->getType()->getScalarSizeInBits(); + } + bool isStridedAccess(const SCEV *Ptr) { return Ptr && isa<SCEVAddRecExpr>(Ptr); } Modified: vendor/llvm/dist/include/llvm/Analysis/ValueTracking.h ============================================================================== --- vendor/llvm/dist/include/llvm/Analysis/ValueTracking.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/Analysis/ValueTracking.h Sat Jan 14 15:37:50 2017 (r312173) @@ -169,8 +169,12 @@ template <typename T> class ArrayRef; /// Return true if we can prove that the specified FP value is either a NaN or /// never less than 0.0. - bool CannotBeOrderedLessThanZero(const Value *V, const TargetLibraryInfo *TLI, - unsigned Depth = 0); + /// If \p IncludeNeg0 is false, -0.0 is considered less than 0.0. + bool CannotBeOrderedLessThanZero(const Value *V, const TargetLibraryInfo *TLI); + + /// \returns true if we can prove that the specified FP value has a 0 sign + /// bit. + bool SignBitMustBeZero(const Value *V, const TargetLibraryInfo *TLI); /// If the specified value can be set by repeating the same byte in memory, /// return the i8 value that it is represented with. This is true for all i8 Modified: vendor/llvm/dist/include/llvm/CodeGen/BasicTTIImpl.h ============================================================================== --- vendor/llvm/dist/include/llvm/CodeGen/BasicTTIImpl.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/CodeGen/BasicTTIImpl.h Sat Jan 14 15:37:50 2017 (r312173) @@ -308,7 +308,8 @@ public: TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue, TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue, TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None, - TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None) { + TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None, + ArrayRef<const Value *> Args = ArrayRef<const Value *>()) { // Check if any of the operands are vector operands. const TargetLoweringBase *TLI = getTLI(); int ISD = TLI->InstructionOpcodeToISD(Opcode); Modified: vendor/llvm/dist/include/llvm/CodeGen/DIE.h ============================================================================== --- vendor/llvm/dist/include/llvm/CodeGen/DIE.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/CodeGen/DIE.h Sat Jan 14 15:37:50 2017 (r312173) @@ -52,13 +52,20 @@ class DIEAbbrevData { /// Dwarf form code. dwarf::Form Form; + /// Dwarf attribute value for DW_FORM_implicit_const + int64_t Value; + public: - DIEAbbrevData(dwarf::Attribute A, dwarf::Form F) : Attribute(A), Form(F) {} + DIEAbbrevData(dwarf::Attribute A, dwarf::Form F) + : Attribute(A), Form(F), Value(0) {} + DIEAbbrevData(dwarf::Attribute A, int64_t V) + : Attribute(A), Form(dwarf::DW_FORM_implicit_const), Value(V) {} /// Accessors. /// @{ dwarf::Attribute getAttribute() const { return Attribute; } dwarf::Form getForm() const { return Form; } + int64_t getValue() const { return Value; } /// @} /// Used to gather unique data for the abbreviation folding set. @@ -102,6 +109,11 @@ public: Data.push_back(DIEAbbrevData(Attribute, Form)); } + /// Adds attribute with DW_FORM_implicit_const value + void AddImplicitConstAttribute(dwarf::Attribute Attribute, int64_t Value) { + Data.push_back(DIEAbbrevData(Attribute, Value)); + } + /// Used to gather unique data for the abbreviation folding set. void Profile(FoldingSetNodeID &ID) const; Modified: vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegBankSelect.h ============================================================================== --- vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegBankSelect.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegBankSelect.h Sat Jan 14 15:37:50 2017 (r312173) @@ -76,6 +76,7 @@ class MachineBlockFrequencyInfo; class MachineRegisterInfo; class TargetPassConfig; class TargetRegisterInfo; +class raw_ostream; /// This pass implements the reg bank selector pass used in the GlobalISel /// pipeline. At the end of this pass, all register operands have been assigned @@ -450,6 +451,18 @@ private: bool operator>(const MappingCost &Cost) const { return *this != Cost && Cost < *this; } + + /// Print this on dbgs() stream. + void dump() const; + + /// Print this on \p OS; + void print(raw_ostream &OS) const; + + /// Overload the stream operator for easy debug printing. + friend raw_ostream &operator<<(raw_ostream &OS, const MappingCost &Cost) { + Cost.print(OS); + return OS; + } }; /// Interface to the target lowering info related @@ -626,6 +639,7 @@ public: /// \endcode bool runOnMachineFunction(MachineFunction &MF) override; }; + } // End namespace llvm. #endif Modified: vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegisterBank.h ============================================================================== --- vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegisterBank.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegisterBank.h Sat Jan 14 15:37:50 2017 (r312173) @@ -41,11 +41,8 @@ private: friend RegisterBankInfo; public: - /// The default constructor will leave the object in - /// an invalid state. I.e. isValid() == false. - /// The fields must be updated to fix that and only - /// RegisterBankInfo instances are allowed to do that - RegisterBank(); + RegisterBank(unsigned ID, const char *Name, unsigned Size, + const uint32_t *ContainedRegClasses); /// Get the identifier of this register bank. unsigned getID() const { return ID; } Modified: vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h ============================================================================== --- vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h Sat Jan 14 15:37:50 2017 (r312173) @@ -384,10 +384,6 @@ protected: /// Create a RegisterBankInfo that can accomodate up to \p NumRegBanks /// RegisterBank instances. - /// - /// \note For the verify method to succeed all the \p NumRegBanks - /// must be initialized by createRegisterBank and updated with - /// addRegBankCoverage RegisterBank. RegisterBankInfo(RegisterBank **RegBanks, unsigned NumRegBanks); /// This constructor is meaningless. @@ -400,31 +396,6 @@ protected: llvm_unreachable("This constructor should not be executed"); } - /// Create a new register bank with the given parameter and add it - /// to RegBanks. - /// \pre \p ID must not already be used. - /// \pre \p ID < NumRegBanks. - void createRegisterBank(unsigned ID, const char *Name); - - /// Add \p RCId to the set of register class that the register bank, - /// identified \p ID, covers. - /// This method transitively adds all the sub classes and the subreg-classes - /// of \p RCId to the set of covered register classes. - /// It also adjusts the size of the register bank to reflect the maximal - /// size of a value that can be hold into that register bank. - /// - /// \note This method does *not* add the super classes of \p RCId. - /// The rationale is if \p ID covers the registers of \p RCId, that - /// does not necessarily mean that \p ID covers the set of registers - /// of RCId's superclasses. - /// This method does *not* add the superreg classes as well for consistents. - /// The expected use is to add the coverage top-down with respect to the - /// register hierarchy. - /// - /// \todo TableGen should just generate the BitSet vector for us. - void addRegBankCoverage(unsigned ID, unsigned RCId, - const TargetRegisterInfo &TRI); - /// Get the register bank identified by \p ID. RegisterBank &getRegBank(unsigned ID) { assert(ID < getNumRegBanks() && "Accessing an unknown register bank"); Modified: vendor/llvm/dist/include/llvm/CodeGen/ISDOpcodes.h ============================================================================== --- vendor/llvm/dist/include/llvm/CodeGen/ISDOpcodes.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/CodeGen/ISDOpcodes.h Sat Jan 14 15:37:50 2017 (r312173) @@ -503,19 +503,6 @@ namespace ISD { /// address spaces. ADDRSPACECAST, - /// CONVERT_RNDSAT - This operator is used to support various conversions - /// between various types (float, signed, unsigned and vectors of those - /// types) with rounding and saturation. NOTE: Avoid using this operator as - /// most target don't support it and the operator might be removed in the - /// future. It takes the following arguments: - /// 0) value - /// 1) dest type (type to convert to) - /// 2) src type (type to convert from) - /// 3) rounding imm - /// 4) saturation imm - /// 5) ISD::CvtCode indicating the type of conversion to do - CONVERT_RNDSAT, - /// FP16_TO_FP, FP_TO_FP16 - These operators are used to perform promotions /// and truncation for half-precision (16 bit) floating numbers. These nodes /// form a semi-softened interface for dealing with f16 (as an i16), which @@ -927,21 +914,6 @@ namespace ISD { /// SETCC_INVALID if it is not possible to represent the resultant comparison. CondCode getSetCCAndOperation(CondCode Op1, CondCode Op2, bool isInteger); - //===--------------------------------------------------------------------===// - /// This enum defines the various converts CONVERT_RNDSAT supports. - enum CvtCode { - CVT_FF, /// Float from Float - CVT_FS, /// Float from Signed - CVT_FU, /// Float from Unsigned - CVT_SF, /// Signed from Float - CVT_UF, /// Unsigned from Float - CVT_SS, /// Signed from Signed - CVT_SU, /// Signed from Unsigned - CVT_US, /// Unsigned from Signed - CVT_UU, /// Unsigned from Unsigned - CVT_INVALID /// Marker - Invalid opcode - }; - } // end llvm::ISD namespace } // end llvm namespace Modified: vendor/llvm/dist/include/llvm/CodeGen/SelectionDAG.h ============================================================================== --- vendor/llvm/dist/include/llvm/CodeGen/SelectionDAG.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/CodeGen/SelectionDAG.h Sat Jan 14 15:37:50 2017 (r312173) @@ -626,12 +626,6 @@ public: SDValue getCondCode(ISD::CondCode Cond); - /// Returns the ConvertRndSat Note: Avoid using this node because it may - /// disappear in the future and most targets don't support it. - SDValue getConvertRndSat(EVT VT, const SDLoc &dl, SDValue Val, SDValue DTy, - SDValue STy, SDValue Rnd, SDValue Sat, - ISD::CvtCode Code); - /// Return an ISD::VECTOR_SHUFFLE node. The number of elements in VT, /// which must be a vector type, must match the number of mask elements /// NumElts. An integer mask element equal to -1 is treated as undefined. Modified: vendor/llvm/dist/include/llvm/CodeGen/SelectionDAGNodes.h ============================================================================== --- vendor/llvm/dist/include/llvm/CodeGen/SelectionDAGNodes.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/CodeGen/SelectionDAGNodes.h Sat Jan 14 15:37:50 2017 (r312173) @@ -1860,26 +1860,6 @@ public: } }; -/// NOTE: avoid using this node as this may disappear in the -/// future and most targets don't support it. -class CvtRndSatSDNode : public SDNode { - ISD::CvtCode CvtCode; - - friend class SelectionDAG; - - explicit CvtRndSatSDNode(EVT VT, unsigned Order, const DebugLoc &dl, - ISD::CvtCode Code) - : SDNode(ISD::CONVERT_RNDSAT, Order, dl, getSDVTList(VT)), CvtCode(Code) { - } - -public: - ISD::CvtCode getCvtCode() const { return CvtCode; } - - static bool classof(const SDNode *N) { - return N->getOpcode() == ISD::CONVERT_RNDSAT; - } -}; - /// This class is used to represent EVT's, which are used /// to parameterize some operations. class VTSDNode : public SDNode { @@ -2041,7 +2021,7 @@ public: friend class SelectionDAG; MaskedStoreSDNode(unsigned Order, const DebugLoc &dl, SDVTList VTs, - bool isTrunc, bool isCompressing, EVT MemVT, + bool isTrunc, bool isCompressing, EVT MemVT, MachineMemOperand *MMO) : MaskedLoadStoreSDNode(ISD::MSTORE, Order, dl, VTs, MemVT, MMO) { StoreSDNodeBits.IsTruncating = isTrunc; @@ -2054,8 +2034,8 @@ public: bool isTruncatingStore() const { return StoreSDNodeBits.IsTruncating; } /// Returns true if the op does a compression to the vector before storing. - /// The node contiguously stores the active elements (integers or floats) - /// in src (those with their respective bit set in writemask k) to unaligned + /// The node contiguously stores the active elements (integers or floats) + /// in src (those with their respective bit set in writemask k) to unaligned /// memory at base_addr. bool isCompressingStore() const { return StoreSDNodeBits.IsCompressing; } Added: vendor/llvm/dist/include/llvm/DebugInfo/CodeView/CVTypeDumper.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/llvm/dist/include/llvm/DebugInfo/CodeView/CVTypeDumper.h Sat Jan 14 15:37:50 2017 (r312173) @@ -0,0 +1,56 @@ +//===-- CVTypeDumper.h - CodeView type info dumper --------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_DEBUGINFO_CODEVIEW_CVTYPEDUMPER_H +#define LLVM_DEBUGINFO_CODEVIEW_CVTYPEDUMPER_H + +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/StringSet.h" +#include "llvm/DebugInfo/CodeView/TypeDatabase.h" +#include "llvm/DebugInfo/CodeView/TypeIndex.h" +#include "llvm/DebugInfo/CodeView/TypeRecord.h" +#include "llvm/DebugInfo/CodeView/TypeVisitorCallbacks.h" +#include "llvm/Support/ScopedPrinter.h" + +namespace llvm { + +namespace codeview { + +/// Dumper for CodeView type streams found in COFF object files and PDB files. +class CVTypeDumper { +public: + explicit CVTypeDumper(TypeDatabase &TypeDB) : TypeDB(TypeDB) {} + + /// Dumps one type record. Returns false if there was a type parsing error, + /// and true otherwise. This should be called in order, since the dumper + /// maintains state about previous records which are necessary for cross + /// type references. + Error dump(const CVType &Record, TypeVisitorCallbacks &Dumper); + + /// Dumps the type records in Types. Returns false if there was a type stream + /// parse error, and true otherwise. + Error dump(const CVTypeArray &Types, TypeVisitorCallbacks &Dumper); + + /// Dumps the type records in Data. Returns false if there was a type stream + /// parse error, and true otherwise. Use this method instead of the + /// CVTypeArray overload when type records are laid out contiguously in + /// memory. + Error dump(ArrayRef<uint8_t> Data, TypeVisitorCallbacks &Dumper); + + static void printTypeIndex(ScopedPrinter &Printer, StringRef FieldName, + TypeIndex TI, TypeDatabase &DB); + +private: + TypeDatabase &TypeDB; +}; + +} // end namespace codeview +} // end namespace llvm + +#endif // LLVM_DEBUGINFO_CODEVIEW_TYPEDUMPER_H Modified: vendor/llvm/dist/include/llvm/DebugInfo/CodeView/SymbolDumper.h ============================================================================== --- vendor/llvm/dist/include/llvm/DebugInfo/CodeView/SymbolDumper.h Sat Jan 14 12:55:32 2017 (r312172) +++ vendor/llvm/dist/include/llvm/DebugInfo/CodeView/SymbolDumper.h Sat Jan 14 15:37:50 2017 (r312173) @@ -20,15 +20,15 @@ namespace llvm { class ScopedPrinter; namespace codeview { -class CVTypeDumper; +class TypeDatabase; /// Dumper for CodeView symbol streams found in COFF object files and PDB files. class CVSymbolDumper { public: - CVSymbolDumper(ScopedPrinter &W, CVTypeDumper &CVTD, + CVSymbolDumper(ScopedPrinter &W, TypeDatabase &TypeDB, std::unique_ptr<SymbolDumpDelegate> ObjDelegate, bool PrintRecordBytes) - : W(W), CVTD(CVTD), ObjDelegate(std::move(ObjDelegate)), + : W(W), TypeDB(TypeDB), ObjDelegate(std::move(ObjDelegate)), PrintRecordBytes(PrintRecordBytes) {} /// Dumps one type record. Returns false if there was a type parsing error, @@ -43,7 +43,7 @@ public: private: ScopedPrinter &W; - CVTypeDumper &CVTD; + TypeDatabase &TypeDB; std::unique_ptr<SymbolDumpDelegate> ObjDelegate; bool PrintRecordBytes; Added: vendor/llvm/dist/include/llvm/DebugInfo/CodeView/TypeDatabase.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/llvm/dist/include/llvm/DebugInfo/CodeView/TypeDatabase.h Sat Jan 14 15:37:50 2017 (r312173) @@ -0,0 +1,55 @@ +//===- TypeDatabase.h - A collection of CodeView type records ---*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_DEBUGINFO_CODEVIEW_TYPEDATABASE_H +#define LLVM_DEBUGINFO_CODEVIEW_TYPEDATABASE_H + +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** _______________________________________________ svn-src-all@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"