| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
This also fixes Jaguar's schedule which was treating it as the WriteVecIMul default.
llvm-svn: 330756
|
| |
|
|
| |
llvm-svn: 330751
|
| |
|
|
|
|
| |
These variants all take an immediate shuffle mask value and should be scheduled as such.
llvm-svn: 330747
|
| |
|
|
|
|
| |
Fixes the classification of VCVTPS2PHmr/VCVTPS2PHYmr which were tagged as WriteCvtF2FLd_WriteRMW (PR36887)
llvm-svn: 330737
|
| |
|
|
|
|
| |
These are stores, not loads, so don't need to account for load latency.
llvm-svn: 330735
|
| |
|
|
| |
llvm-svn: 330720
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Split off pinsr/pextr and extractps instructions.
(Mostly) fixes PR36887.
Note: It might be worth adding a WriteFInsertLd class as well in the future.
Differential Revision: https://reviews.llvm.org/D45929
llvm-svn: 330714
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
If attribute "use-soft-float"="true" is set then X86ISelLowering.cpp sets
'Promote' action for ISD::SINT_TO_FP operation on type i32.
But 'Promote' action is not proper in this case since lib function
__floatsidf is available for casting from signed int to float type.
Thus Expand action is more suitable here.
The Expand action should be set for ISD::UINT_TO_FP for soft float as well.
If function attribute "use-soft-float"="true" is set then infinite looping
can happen in DAG combining, function visitSINT_TO_FP() replaces SINT_TO_FP
node with UINT_TO_FP node and function combineUIntToFP() replace vice versa in cycle.
The fix prevents it.
Patch by vrybalov
Differential Revision: https://reviews.llvm.org/D45572
llvm-svn: 330711
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch aims to provide correct dwarf unwind information in function
epilogue for X86.
It consists of two parts. The first part inserts CFI instructions that set
appropriate cfa offset and cfa register in emitEpilogue() in
X86FrameLowering. This part is X86 specific.
The second part is platform independent and ensures that:
* CFI instructions do not affect code generation (they are not counted as
instructions when tail duplicating or tail merging)
* Unwind information remains correct when a function is modified by
different passes. This is done in a late pass by analyzing information
about cfa offset and cfa register in BBs and inserting additional CFI
directives where necessary.
Added CFIInstrInserter pass:
* analyzes each basic block to determine cfa offset and register are valid
at its entry and exit
* verifies that outgoing cfa offset and register of predecessor blocks match
incoming values of their successors
* inserts additional CFI directives at basic block beginning to correct the
rule for calculating CFA
Having CFI instructions in function epilogue can cause incorrect CFA
calculation rule for some basic blocks. This can happen if, due to basic
block reordering, or the existence of multiple epilogue blocks, some of the
blocks have wrong cfa offset and register values set by the epilogue block
above them.
CFIInstrInserter is currently run only on X86, but can be used by any target
that implements support for adding CFI instructions in epilogue.
Patch by Violeta Vukobrat.
Differential Revision: https://reviews.llvm.org/D42848
llvm-svn: 330706
|
| |
|
|
|
|
| |
This encoding is recognized by the CPU, but the behavior is undefined. This makes the disassembler handle it correctly so we don't print bswapl with a 16-bit register.
llvm-svn: 330682
|
| |
|
|
|
|
| |
We have test coverage for these with resources-sse*/avx*
llvm-svn: 330662
|
| |
|
|
|
|
| |
We have test coverage for these with resources-bmi2.s
llvm-svn: 330659
|
| |
|
|
| |
llvm-svn: 330648
|
| |
|
|
| |
llvm-svn: 330640
|
| |
|
|
|
| |
Reviewers: craig.topper
llvm-svn: 330638
|
| |
|
|
| |
llvm-svn: 330611
|
| |
|
|
|
|
| |
Note - noticed this as the STAC case as it was unintentionally matching against *STACK* pseudo instructions.
llvm-svn: 330588
|
| |
|
|
| |
llvm-svn: 330581
|
| |
|
|
| |
llvm-svn: 330563
|
| |
|
|
| |
llvm-svn: 330558
|
| |
|
|
|
|
| |
Fixed a lot of the default classes which were being completely overridden.
llvm-svn: 330554
|
| |
|
|
| |
llvm-svn: 330553
|
| |
|
|
| |
llvm-svn: 330552
|
| |
|
|
| |
llvm-svn: 330549
|
| |
|
|
| |
llvm-svn: 330548
|
| |
|
|
|
|
| |
to remove unnecessary instrw overrides.
llvm-svn: 330546
|
| |
|
|
| |
llvm-svn: 330545
|
| |
|
|
|
|
| |
This also fixes some of the ReadAfterLd issues due to InstRW.
llvm-svn: 330544
|
| |
|
|
|
|
| |
instrw overrides.
llvm-svn: 330542
|
| |
|
|
|
|
| |
latency.
llvm-svn: 330541
|
| |
|
|
|
|
| |
This matches the other FENCE instructions.
llvm-svn: 330533
|
| |
|
|
|
|
| |
OpSizeFixed.
llvm-svn: 330532
|
| |
|
|
|
|
|
|
|
|
| |
'data32' in 16-bit mode. Hack the asm parser to convert 'data32' to 'data16' in 16-bit mode.
Improve the error messages to match GNU assembler.
This also allows us to remove the hack from the disassembler table building.
llvm-svn: 330531
|
| |
|
|
|
|
| |
scheduler models.
llvm-svn: 330527
|
| |
|
|
| |
llvm-svn: 330525
|
| |
|
|
|
|
| |
models.
llvm-svn: 330523
|
| |
|
|
|
|
| |
VPERM2I128/VINSERTI128
llvm-svn: 330522
|
| |
|
|
|
|
| |
pack/unpack instruction instrw overrides from scheduler models.
llvm-svn: 330521
|
| |
|
|
|
|
|
|
| |
PMULHW/PMULHUW.
Ultimately I want to use this to remove the intrinsics for these instructions.
llvm-svn: 330520
|
| |
|
|
| |
llvm-svn: 330517
|
| |
|
|
|
|
| |
overrides.
llvm-svn: 330514
|
| |
|
|
|
|
| |
D45629
llvm-svn: 330513
|
| |
|
|
|
|
|
|
| |
from scheduler models.
The required the default skylake schedules to be updated - these were being completely overriden by the InstRW and the existing values not used at all.
llvm-svn: 330510
|
| |
|
|
|
|
| |
scheduler models.
llvm-svn: 330508
|
| |
|
|
| |
llvm-svn: 330505
|
| |
|
|
| |
llvm-svn: 330503
|
| |
|
|
| |
llvm-svn: 330501
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Split the fp and integer vector logical instruction scheduler classes - older CPUs especially often handled these on different pipes.
This unearthed a couple of things that are also handled in this patch:
(1) We were tagging avx512 fp logic ops as WriteFAdd, probably because of the lack of WriteFLogic
(2) SandyBridge had integer logic ops only using Port5, when afaict they can use Ports015.
(3) Cleaned up x86 FCHS/FABS scheduling as they are typically treated as fp logic ops.
Differential Revision: https://reviews.llvm.org/D45629
llvm-svn: 330480
|
| |
|
|
| |
llvm-svn: 330465
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Three new instructions:
umonitor - Sets up a linear address range to be
monitored by hardware and activates the monitor.
The address range should be a writeback memory
caching type.
umwait - A hint that allows the processor to
stop instruction execution and enter an
implementation-dependent optimized state
until occurrence of a class of events.
tpause - Directs the processor to enter an
implementation-dependent optimized state
until the TSC reaches the value in EDX:EAX.
Also modifying the description of the mfence
instruction, as the rep prefix (0xF3) was allowed
before, which would conflict with umonitor during
disassembly.
Before:
$ echo 0xf3,0x0f,0xae,0xf0 | llvm-mc -disassemble
.text
mfence
After:
$ echo 0xf3,0x0f,0xae,0xf0 | llvm-mc -disassemble
.text
umonitor %rax
Reviewers: craig.topper, zvi
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D45253
llvm-svn: 330462
|