llvm-6502/lib/Target/X86
2005-12-13 00:25:07 +00:00
..
.cvsignore
Makefile
README.txt add a note 2005-12-02 00:11:20 +00:00
X86.h remove some never-completed and now-obsolete code. 2005-12-12 20:12:20 +00:00
X86.td
X86AsmPrinter.cpp
X86AsmPrinter.h
X86ATTAsmPrinter.cpp
X86ATTAsmPrinter.h
X86CodeEmitter.cpp
X86ELFWriter.cpp
X86FloatingPoint.cpp
X86InstrBuilder.h
X86InstrInfo.cpp
X86InstrInfo.h
X86InstrInfo.td Missed a couple redundant explicit type casts. 2005-12-13 00:25:07 +00:00
X86IntelAsmPrinter.cpp
X86IntelAsmPrinter.h
X86ISelDAGToDAG.cpp When SelectLEAAddr() fails, it shouldn't cause the side effect of having the 2005-12-12 21:49:40 +00:00
X86ISelLowering.cpp X86 doesn't support sextinreg for 8-bit things either. 2005-12-07 17:59:14 +00:00
X86ISelLowering.h
X86ISelPattern.cpp Fix PR672 another way which should be more robust 2005-12-04 06:03:50 +00:00
X86JITInfo.cpp
X86JITInfo.h
X86PeepholeOpt.cpp remove some never-completed and now-obsolete code. 2005-12-12 20:12:20 +00:00
X86RegisterInfo.cpp
X86RegisterInfo.h
X86RegisterInfo.td
X86Relocations.h
X86Subtarget.cpp
X86Subtarget.h
X86TargetMachine.cpp remove some never-completed and now-obsolete code. 2005-12-12 20:12:20 +00:00
X86TargetMachine.h

//===---------------------------------------------------------------------===//
// Random ideas for the X86 backend.
//===---------------------------------------------------------------------===//

Add a MUL2U and MUL2S nodes to represent a multiply that returns both the
Hi and Lo parts (combination of MUL and MULH[SU] into one node).  Add this to
X86, & make the dag combiner produce it when needed.  This will eliminate one
imul from the code generated for:

long long test(long long X, long long Y) { return X*Y; }

by using the EAX result from the mul.  We should add a similar node for
DIVREM.

another case is:

long long test(int X, int Y) { return (long long)X*Y; }

... which should only be one imul instruction.

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

This should be one DIV/IDIV instruction, not a libcall:

unsigned test(unsigned long long X, unsigned Y) {
        return X/Y;
}

This can be done trivially with a custom legalizer.  What about overflow 
though?  http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14224

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

Need to add support for rotate instructions.

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

Some targets (e.g. athlons) prefer freep to fstp ST(0):
http://gcc.gnu.org/ml/gcc-patches/2004-04/msg00659.html

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

This should use faddi on chips where it is profitable:
double foo(double P, int *I) { return P+*I; }

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

The FP stackifier needs to be global.  Also, it should handle simple permutates
to reduce number of shuffle instructions, e.g. turning:

fld P	->		fld Q
fld Q			fld P
fxch

or:

fxch	->		fucomi
fucomi			jl X
jg X

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

Improvements to the multiply -> shift/add algorithm:
http://gcc.gnu.org/ml/gcc-patches/2004-08/msg01590.html

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

Improve code like this (occurs fairly frequently, e.g. in LLVM):
long long foo(int x) { return 1LL << x; }

http://gcc.gnu.org/ml/gcc-patches/2004-09/msg01109.html
http://gcc.gnu.org/ml/gcc-patches/2004-09/msg01128.html
http://gcc.gnu.org/ml/gcc-patches/2004-09/msg01136.html

Another useful one would be  ~0ULL >> X and ~0ULL << X.

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

Should support emission of the bswap instruction, probably by adding a new
DAG node for byte swapping.  Also useful on PPC which has byte-swapping loads.

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

Compile this:
_Bool f(_Bool a) { return a!=1; }

into:
        movzbl  %dil, %eax
        xorl    $1, %eax
        ret