FailedChanges

Summary

  1. [SVE][IR] Scalable Vector size queries and IR instruction support * Adds a TypeSize struct to represent the known minimum size of a type along with a flag to indicate that the runtime size is a integer multiple of that size * Converts existing size query functions from Type.h and DataLayout.h to return a TypeSize result * Adds convenience methods (including a transparent conversion operator to uint64_t) so that most existing code 'just works' as if the return values were still scalars. * Uses the new size queries along with ElementCount to ensure that all supported instructions used with scalable vectors can be constructed in IR. Reviewers: hfinkel, lattner, rkruppe, greened, rovka, rengolin, sdesmalen Reviewed By: rovka, sdesmalen Differential Revision: https://reviews.llvm.org/D53137
  2. [LoopRotate] Unconditionally get DomTree. LoopRotate is a loop pass and the DomTree should always be available. Similar to a70c5261436322a53187d67b8bdc0445d0463a9a
  3. [Diagnostics] Silence -Wsizeof-array-div for character buffers Summary: Character buffers are sometimes used to represent a pool of memory that contains non-character objects, due to them being synonymous with a stream of bytes on almost all modern architectures. Often, when interacting with hardware devices, byte buffers are therefore used as an intermediary and so we can end Character buffers are sometimes used to represent a pool of memory that contains non-character objects, due to them being synonymous with a stream of bytes on almost all modern architectures. Often, when interacting with hardware devices, byte buffers are therefore used as an intermediary and so we can end up generating lots of false-positives. Moreover, due to the ability of character pointers to alias non-character pointers, the strict aliasing violations that would generally be implied by the calculations caught by the warning (if the calculation itself is in fact correct) do not apply here, and so although the length calculation may be wrong, that is the only possible issue. Reviewers: rsmith, xbolva00, thakis Reviewed By: xbolva00, thakis Subscribers: thakis, lebedev.ri, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D68526
  4. [MCA][LSUnit] Track loads and stores until retirement. Before this patch, loads and stores were only tracked by their corresponding queues in the LSUnit from dispatch until execute stage. In practice we should be more conservative and assume that memory opcodes leave their queues at retirement stage. Basically, loads should leave the load queue only when they have completed and delivered their data. We conservatively assume that a load is completed when it is retired. Stores should be tracked by the store queue from dispatch until retirement. In practice, stores can only leave the store queue if their data can be written to the data cache. This is mostly a mechanical change. With this patch, the retire stage notifies the LSUnit when a memory instruction is retired. That would triggers the release of LDQ/STQ entries. The only visible change is in memory tests for the bdver2 model. That is because bdver2 is the only model that defines the load/store queue size. This patch partially addresses PR39830. Differential Revision: https://reviews.llvm.org/D68266
  5. [ISEL][ARM][AARCH64] Tracking simple parameter forwarding registers Support for tracking registers that forward function parameters into the following function frame. For now we only support cases when parameter is forwarded through single register. Reviewers: aprantl, vsk, t.p.northover Reviewed By: vsk Differential Revision: https://reviews.llvm.org/D66953
  6. Remove an useless allocation (from by clang-analyzer/scan-build) https://llvm.org/reports/scan-build/report-TargetInfo.cpp-detectFPCCEligibleStruct-9-1.html#EndPath
  7. [llvm-exegesis] Finish plumbing the `Config` field. Summary: Right now there are no snippet generators that emit the `Config` Field, but I plan to add it to investigate LEA operands for PR32326. What was broken was: - `Config` Was not propagated up until the BenchmarkResult::Key. - Clustering should really consider different configs as measuring different things, so we should stabilize on (Opcode, Config) instead of just Opcode. Reviewers: gchatelet Subscribers: tschuett, llvm-commits, lebedev.ri Tags: #llvm Differential Revision: https://reviews.llvm.org/D68629
  8. [llvm-readobj/llvm-readelf] - Add checks for GNU-style to "all.test" test case. We do not check the GNU-style output when -all is given. This patch does that. Differential revision: https://reviews.llvm.org/D68462
  9. [NFC] Add REQUIRES for r374017 in testcase
  10. [LoopRotate] Unconditionally get ScalarEvolution. Summary: LoopRotate is a loop pass and SE should always be available. Reviewers: anemet, asbirlea Reviewed By: asbirlea Differential Revision: https://reviews.llvm.org/D68573
  11. [ARM] Generate vcmp instead of vcmpe Based on the discussion in http://lists.llvm.org/pipermail/llvm-dev/2019-October/135574.html, the conclusion was reached that the ARM backend should produce vcmp instead of vcmpe instructions by default, i.e. not be producing an Invalid Operation exception when either arguments in a floating point compare are quiet NaNs. In the future, after constrained floating point intrinsics for floating point compare have been introduced, vcmpe instructions probably should be produced for those intrinsics - depending on the exact semantics they'll be defined to have. This patch logically consists of the following parts: - Revert http://llvm.org/viewvc/llvm-project?rev=294945&view=rev and http://llvm.org/viewvc/llvm-project?rev=294968&view=rev, which implemented fine-tuning for when to produce vcmpe (i.e. not do it for equality comparisons). The complexity introduced by those patches isn't needed anymore if we just always produce vcmp instead. Maybe these patches need to be reintroduced again once support is needed to map potential LLVM-IR constrained floating point compare intrinsics to the ARM instruction set. - Simply select vcmp, instead of vcmpe, see simple changes in lib/Target/ARM/ARMInstrVFP.td - Adapt lots of tests that tested for vcmpe (instead of vcmp). For all of these test, the intent of what is tested for isn't related to whether the vcmp should produce an Invalid Operation exception or not. Fixes PR43374. Differential Revision: https://reviews.llvm.org/D68463
  12. [Tools] Mark output of tools as text if it is text Several LLVM tools write text files/streams without using OF_Text. This can cause problems on platforms which distinguish between text and binary output. This PR adds the OF_Text flag for the following tools: - llvm-dis - llvm-dwarfdump - llvm-mca - llvm-mc (assembler files only) - opt (assembler files only) - RemarkStreamer (used e.g. by opt) Reviewers: rnk, vivekvpandya, Bigcheese, andreadb Differential Revision: https://reviews.llvm.org/D67696
Revision 374042 by huntergr:
[SVE][IR] Scalable Vector size queries and IR instruction support

* Adds a TypeSize struct to represent the known minimum size of a type
  along with a flag to indicate that the runtime size is a integer multiple
  of that size
* Converts existing size query functions from Type.h and DataLayout.h to
  return a TypeSize result
* Adds convenience methods (including a transparent conversion operator
  to uint64_t) so that most existing code 'just works' as if the return
  values were still scalars.
* Uses the new size queries along with ElementCount to ensure that all
  supported instructions used with scalable vectors can be constructed
  in IR.

Reviewers: hfinkel, lattner, rkruppe, greened, rovka, rengolin, sdesmalen

Reviewed By: rovka, sdesmalen

Differential Revision: https://reviews.llvm.org/D53137
Change TypePath in RepositoryPath in Workspace
The file was modified/cfe/trunk/lib/CodeGen/CGCall.cppclang.src/lib/CodeGen/CGCall.cpp
The file was modified/cfe/trunk/lib/CodeGen/CGStmt.cppclang.src/lib/CodeGen/CGStmt.cpp
The file was modified/cfe/trunk/lib/CodeGen/CodeGenFunction.cppclang.src/lib/CodeGen/CodeGenFunction.cpp
The file was modified/llvm/trunk/include/llvm/ADT/DenseMapInfo.hN/A
The file was modified/llvm/trunk/include/llvm/IR/DataLayout.hN/A
The file was modified/llvm/trunk/include/llvm/IR/DerivedTypes.hN/A
The file was modified/llvm/trunk/include/llvm/IR/InstrTypes.hN/A
The file was modified/llvm/trunk/include/llvm/IR/Type.hN/A
The file was modified/llvm/trunk/include/llvm/Support/MachineValueType.hN/A
The file was removed/llvm/trunk/include/llvm/Support/ScalableSize.hN/A
The file was added/llvm/trunk/include/llvm/Support/TypeSize.hN/A
The file was modified/llvm/trunk/lib/Analysis/InlineCost.cppN/A
The file was modified/llvm/trunk/lib/CodeGen/Analysis.cppN/A
The file was modified/llvm/trunk/lib/IR/DataLayout.cppN/A
The file was modified/llvm/trunk/lib/IR/Instructions.cppN/A
The file was modified/llvm/trunk/lib/IR/Type.cppN/A
The file was modified/llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cppN/A
The file was modified/llvm/trunk/lib/Transforms/Scalar/SROA.cppN/A
The file was added/llvm/trunk/test/Other/scalable-vectors-core-ir.llN/A
The file was modified/llvm/trunk/unittests/CodeGen/ScalableVectorMVTsTest.cppN/A
The file was modified/llvm/trunk/unittests/IR/VectorTypesTest.cppN/A
Revision 374036 by fhahn:
[LoopRotate] Unconditionally get DomTree.

LoopRotate is a loop pass and the DomTree should always be available.

Similar to a70c5261436322a53187d67b8bdc0445d0463a9a
Change TypePath in RepositoryPath in Workspace
The file was modified/llvm/trunk/lib/Transforms/Scalar/LoopRotation.cppllvm.src/lib/Transforms/Scalar/LoopRotation.cpp
Revision 374035 by jrtc27:
[Diagnostics] Silence -Wsizeof-array-div for character buffers

Summary:
Character buffers are sometimes used to represent a pool of memory that
contains non-character objects, due to them being synonymous with a stream of
bytes on almost all modern architectures. Often, when interacting with hardware
devices, byte buffers are therefore used as an intermediary and so we can end
Character buffers are sometimes used to represent a pool of memory that
contains non-character objects, due to them being synonymous with a stream of
bytes on almost all modern architectures. Often, when interacting with hardware
devices, byte buffers are therefore used as an intermediary and so we can end
up generating lots of false-positives.

Moreover, due to the ability of character pointers to alias non-character
pointers, the strict aliasing violations that would generally be implied by the
calculations caught by the warning (if the calculation itself is in fact
correct) do not apply here, and so although the length calculation may be
wrong, that is the only possible issue.

Reviewers: rsmith, xbolva00, thakis

Reviewed By: xbolva00, thakis

Subscribers: thakis, lebedev.ri, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D68526
Change TypePath in RepositoryPath in Workspace
The file was modified/cfe/trunk/lib/Sema/SemaExpr.cppclang.src/lib/Sema/SemaExpr.cpp
The file was modified/cfe/trunk/test/Sema/div-sizeof-array.cppclang.src/test/Sema/div-sizeof-array.cpp
Revision 374034 by adibiagio:
[MCA][LSUnit] Track loads and stores until retirement.

Before this patch, loads and stores were only tracked by their corresponding
queues in the LSUnit from dispatch until execute stage. In practice we should be
more conservative and assume that memory opcodes leave their queues at
retirement stage.

Basically, loads should leave the load queue only when they have completed and
delivered their data. We conservatively assume that a load is completed when it
is retired. Stores should be tracked by the store queue from dispatch until
retirement. In practice, stores can only leave the store queue if their data can
be written to the data cache.

This is mostly a mechanical change. With this patch, the retire stage notifies
the LSUnit when a memory instruction is retired. That would triggers the release
of LDQ/STQ entries.  The only visible change is in memory tests for the bdver2
model. That is because bdver2 is the only model that defines the load/store
queue size.

This patch partially addresses PR39830.

Differential Revision: https://reviews.llvm.org/D68266
Change TypePath in RepositoryPath in Workspace
The file was modified/llvm/trunk/include/llvm/MCA/HardwareUnits/LSUnit.hllvm.src/include/llvm/MCA/HardwareUnits/LSUnit.h
The file was modified/llvm/trunk/include/llvm/MCA/Stages/RetireStage.hllvm.src/include/llvm/MCA/Stages/RetireStage.h
The file was modified/llvm/trunk/lib/MCA/Context.cppllvm.src/lib/MCA/Context.cpp
The file was modified/llvm/trunk/lib/MCA/HardwareUnits/LSUnit.cppllvm.src/lib/MCA/HardwareUnits/LSUnit.cpp
The file was modified/llvm/trunk/lib/MCA/Stages/RetireStage.cppllvm.src/lib/MCA/Stages/RetireStage.cpp
The file was modified/llvm/trunk/test/tools/llvm-mca/X86/BdVer2/load-store-throughput.sllvm.src/test/tools/llvm-mca/X86/BdVer2/load-store-throughput.s
The file was modified/llvm/trunk/test/tools/llvm-mca/X86/BdVer2/load-throughput.sllvm.src/test/tools/llvm-mca/X86/BdVer2/load-throughput.s
The file was modified/llvm/trunk/test/tools/llvm-mca/X86/BdVer2/store-throughput.sllvm.src/test/tools/llvm-mca/X86/BdVer2/store-throughput.s
Revision 374033 by nikolaprica:
[ISEL][ARM][AARCH64] Tracking simple parameter forwarding registers

Support for tracking registers that forward function parameters into the
following function frame. For now we only support cases when parameter
is forwarded through single register.

Reviewers: aprantl, vsk, t.p.northover

Reviewed By: vsk

Differential Revision: https://reviews.llvm.org/D66953
Change TypePath in RepositoryPath in Workspace
The file was modified/llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cppllvm.src/lib/Target/AArch64/AArch64ISelLowering.cpp
The file was modified/llvm/trunk/lib/Target/ARM/ARMExpandPseudoInsts.cppllvm.src/lib/Target/ARM/ARMExpandPseudoInsts.cpp
The file was modified/llvm/trunk/lib/Target/ARM/ARMISelLowering.cppllvm.src/lib/Target/ARM/ARMISelLowering.cpp
The file was added/llvm/trunk/test/DebugInfo/AArch64/call-site-info-output.llllvm.src/test/DebugInfo/AArch64/call-site-info-output.ll
The file was added/llvm/trunk/test/DebugInfo/ARM/call-site-info-output.llllvm.src/test/DebugInfo/ARM/call-site-info-output.ll
Revision 374032 by sylvestre:
Remove an useless allocation (from by clang-analyzer/scan-build)
https://llvm.org/reports/scan-build/report-TargetInfo.cpp-detectFPCCEligibleStruct-9-1.html#EndPath
Change TypePath in RepositoryPath in Workspace
The file was modified/cfe/trunk/lib/CodeGen/TargetInfo.cppclang.src/lib/CodeGen/TargetInfo.cpp
Revision 374031 by courbet:
[llvm-exegesis] Finish plumbing the `Config` field.

Summary:
Right now there are no snippet generators that emit the `Config` Field,
but I plan to add it to investigate LEA operands for PR32326.

What was broken was:
- `Config` Was not propagated up until the BenchmarkResult::Key.
- Clustering should really consider different configs as measuring
different things, so we should stabilize on (Opcode, Config) instead of
just Opcode.

Reviewers: gchatelet

Subscribers: tschuett, llvm-commits, lebedev.ri

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D68629
Change TypePath in RepositoryPath in Workspace
The file was modified/llvm/trunk/test/tools/llvm-exegesis/X86/analysis-cluster-stabilization-config.testllvm.src/test/tools/llvm-exegesis/X86/analysis-cluster-stabilization-config.test
The file was modified/llvm/trunk/tools/llvm-exegesis/lib/BenchmarkCode.hllvm.src/tools/llvm-exegesis/lib/BenchmarkCode.h
The file was modified/llvm/trunk/tools/llvm-exegesis/lib/BenchmarkResult.hllvm.src/tools/llvm-exegesis/lib/BenchmarkResult.h
The file was modified/llvm/trunk/tools/llvm-exegesis/lib/BenchmarkRunner.cppllvm.src/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
The file was modified/llvm/trunk/tools/llvm-exegesis/lib/Clustering.cppllvm.src/tools/llvm-exegesis/lib/Clustering.cpp
The file was modified/llvm/trunk/tools/llvm-exegesis/lib/CodeTemplate.hllvm.src/tools/llvm-exegesis/lib/CodeTemplate.h
The file was modified/llvm/trunk/tools/llvm-exegesis/lib/SnippetFile.cppllvm.src/tools/llvm-exegesis/lib/SnippetFile.cpp
The file was modified/llvm/trunk/tools/llvm-exegesis/lib/SnippetGenerator.cppllvm.src/tools/llvm-exegesis/lib/SnippetGenerator.cpp
The file was modified/llvm/trunk/unittests/tools/llvm-exegesis/X86/SnippetFileTest.cppllvm.src/unittests/tools/llvm-exegesis/X86/SnippetFileTest.cpp
Revision 374028 by grimar:
[llvm-readobj/llvm-readelf] - Add checks for GNU-style to "all.test" test case.

We do not check the GNU-style output when -all is given.
This patch does that.

Differential revision: https://reviews.llvm.org/D68462
Change TypePath in RepositoryPath in Workspace
The file was modified/llvm/trunk/test/tools/llvm-readobj/all.testllvm.src/test/tools/llvm-readobj/all.test
Revision 374027 by wuzish:
[NFC] Add REQUIRES for r374017 in testcase
Change TypePath in RepositoryPath in Workspace
The file was modified/llvm/trunk/test/Transforms/LoopVectorize/PowerPC/reg-usage.llllvm.src/test/Transforms/LoopVectorize/PowerPC/reg-usage.ll
Revision 374026 by fhahn:
[LoopRotate] Unconditionally get ScalarEvolution.

Summary: LoopRotate is a loop pass and SE should always be available.

Reviewers: anemet, asbirlea

Reviewed By: asbirlea

Differential Revision: https://reviews.llvm.org/D68573
Change TypePath in RepositoryPath in Workspace
The file was modified/llvm/trunk/lib/Transforms/Scalar/LoopRotation.cppllvm.src/lib/Transforms/Scalar/LoopRotation.cpp
Revision 374025 by kbeyls:
[ARM] Generate vcmp instead of vcmpe

Based on the discussion in
http://lists.llvm.org/pipermail/llvm-dev/2019-October/135574.html, the
conclusion was reached that the ARM backend should produce vcmp instead
of vcmpe instructions by default, i.e. not be producing an Invalid
Operation exception when either arguments in a floating point compare
are quiet NaNs.

In the future, after constrained floating point intrinsics for floating
point compare have been introduced, vcmpe instructions probably should
be produced for those intrinsics - depending on the exact semantics
they'll be defined to have.

This patch logically consists of the following parts:
- Revert http://llvm.org/viewvc/llvm-project?rev=294945&view=rev and
  http://llvm.org/viewvc/llvm-project?rev=294968&view=rev, which
  implemented fine-tuning for when to produce vcmpe (i.e. not do it for
  equality comparisons). The complexity introduced by those patches
  isn't needed anymore if we just always produce vcmp instead. Maybe
  these patches need to be reintroduced again once support is needed to
  map potential LLVM-IR constrained floating point compare intrinsics to
  the ARM instruction set.
- Simply select vcmp, instead of vcmpe, see simple changes in
  lib/Target/ARM/ARMInstrVFP.td
- Adapt lots of tests that tested for vcmpe (instead of vcmp). For all
  of these test, the intent of what is tested for isn't related to
  whether the vcmp should produce an Invalid Operation exception or not.

Fixes PR43374.

Differential Revision: https://reviews.llvm.org/D68463
Change TypePath in RepositoryPath in Workspace
The file was modified/llvm/trunk/lib/Target/ARM/ARMFastISel.cppllvm.src/lib/Target/ARM/ARMFastISel.cpp
The file was modified/llvm/trunk/lib/Target/ARM/ARMISelLowering.cppllvm.src/lib/Target/ARM/ARMISelLowering.cpp
The file was modified/llvm/trunk/lib/Target/ARM/ARMISelLowering.hllvm.src/lib/Target/ARM/ARMISelLowering.h
The file was modified/llvm/trunk/lib/Target/ARM/ARMInstrInfo.tdllvm.src/lib/Target/ARM/ARMInstrInfo.td
The file was modified/llvm/trunk/lib/Target/ARM/ARMInstrVFP.tdllvm.src/lib/Target/ARM/ARMInstrVFP.td
The file was modified/llvm/trunk/test/CodeGen/ARM/2009-07-18-RewriterBug.llllvm.src/test/CodeGen/ARM/2009-07-18-RewriterBug.ll
The file was modified/llvm/trunk/test/CodeGen/ARM/arm-shrink-wrapping.llllvm.src/test/CodeGen/ARM/arm-shrink-wrapping.ll
The file was modified/llvm/trunk/test/CodeGen/ARM/compare-call.llllvm.src/test/CodeGen/ARM/compare-call.ll
The file was modified/llvm/trunk/test/CodeGen/ARM/fcmp-xo.llllvm.src/test/CodeGen/ARM/fcmp-xo.ll
The file was modified/llvm/trunk/test/CodeGen/ARM/float-helpers.sllvm.src/test/CodeGen/ARM/float-helpers.s
The file was modified/llvm/trunk/test/CodeGen/ARM/fp16-instructions.llllvm.src/test/CodeGen/ARM/fp16-instructions.ll
The file was modified/llvm/trunk/test/CodeGen/ARM/fp16-promote.llllvm.src/test/CodeGen/ARM/fp16-promote.ll
The file was modified/llvm/trunk/test/CodeGen/ARM/fpcmp.llllvm.src/test/CodeGen/ARM/fpcmp.ll
The file was modified/llvm/trunk/test/CodeGen/ARM/ifcvt11.llllvm.src/test/CodeGen/ARM/ifcvt11.ll
The file was modified/llvm/trunk/test/CodeGen/ARM/swifterror.llllvm.src/test/CodeGen/ARM/swifterror.ll
The file was removed/llvm/trunk/test/CodeGen/ARM/vcmp-crash.llllvm.src/test/CodeGen/ARM/vcmp-crash.ll
The file was modified/llvm/trunk/test/CodeGen/ARM/vfp.llllvm.src/test/CodeGen/ARM/vfp.ll
The file was modified/llvm/trunk/test/CodeGen/ARM/vsel-fp16.llllvm.src/test/CodeGen/ARM/vsel-fp16.ll
The file was modified/llvm/trunk/test/CodeGen/ARM/vsel.llllvm.src/test/CodeGen/ARM/vsel.ll
The file was modified/llvm/trunk/test/CodeGen/Thumb2/float-cmp.llllvm.src/test/CodeGen/Thumb2/float-cmp.ll
The file was modified/llvm/trunk/test/CodeGen/Thumb2/mve-vcmpf.llllvm.src/test/CodeGen/Thumb2/mve-vcmpf.ll
The file was modified/llvm/trunk/test/CodeGen/Thumb2/mve-vcmpfr.llllvm.src/test/CodeGen/Thumb2/mve-vcmpfr.ll
The file was modified/llvm/trunk/test/CodeGen/Thumb2/mve-vcmpfz.llllvm.src/test/CodeGen/Thumb2/mve-vcmpfz.ll
Revision 374024 by redstar:
[Tools] Mark output of tools as text if it is text

Several LLVM tools write text files/streams without using OF_Text.
This can cause problems on platforms which distinguish between
text and binary output. This PR adds the OF_Text flag for the
following tools:

- llvm-dis
- llvm-dwarfdump
- llvm-mca
- llvm-mc (assembler files only)
- opt (assembler files only)
- RemarkStreamer (used e.g. by opt)

Reviewers: rnk, vivekvpandya, Bigcheese, andreadb

Differential Revision: https://reviews.llvm.org/D67696
Change TypePath in RepositoryPath in Workspace
The file was modified/llvm/trunk/lib/IR/RemarkStreamer.cppllvm.src/lib/IR/RemarkStreamer.cpp
The file was modified/llvm/trunk/tools/llvm-dis/llvm-dis.cppllvm.src/tools/llvm-dis/llvm-dis.cpp
The file was modified/llvm/trunk/tools/llvm-dwarfdump/llvm-dwarfdump.cppllvm.src/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
The file was modified/llvm/trunk/tools/llvm-mc/llvm-mc.cppllvm.src/tools/llvm-mc/llvm-mc.cpp
The file was modified/llvm/trunk/tools/llvm-mca/llvm-mca.cppllvm.src/tools/llvm-mca/llvm-mca.cpp
The file was modified/llvm/trunk/tools/opt/opt.cppllvm.src/tools/opt/opt.cpp