hanchenye-llvm-project/llvm/lib
Hal Finkel 851b33a0b1 [PowerPC] Load two floats directly instead of using one 64-bit integer load
When dealing with complex<float>, and similar structures with two
single-precision floating-point numbers, especially when such things are being
passed around by value, we'll sometimes end up loading both float values by
extracting them from one 64-bit integer load. It looks like this:

  t13: i64,ch = load<LD8[%ref.tmp]> t0, t6, undef:i64
      t16: i64 = srl t13, Constant:i32<32>
    t17: i32 = truncate t16
  t18: f32 = bitcast t17
    t19: i32 = truncate t13
  t20: f32 = bitcast t19

The problem, especially before the P8 where those bitcasts aren't legal (and
get expanded via the stack), is that it would have been better to use two
floating-point loads directly. Here we add a target-specific DAGCombine to do
just that. In short, we turn:

	ld 3, 0(5)
	stw 3, -8(1)
	rldicl 3, 3, 32, 32
	stw 3, -4(1)
	lfs 3, -4(1)
	lfs 0, -8(1)

into:

        lfs 3, 4(5)
        lfs 0, 0(5)

llvm-svn: 264988
2016-03-31 02:56:05 +00:00
..
Analysis [VectorUtils] Don't try and truncate PHIs to a smaller bitwidth 2016-03-30 10:11:43 +00:00
AsmParser Restore "[ThinLTO] Serialize the Module SourceFileName to/from LLVM assembly" 2016-03-30 18:15:08 +00:00
Bitcode BitcodeReader: Fix weird whitespace, NFC 2016-03-30 04:21:52 +00:00
CodeGen CodeGen: Factor out code for tail call result compatibility check; NFC 2016-03-30 22:46:04 +00:00
DebugInfo Fix Clang-tidy modernize-deprecated-headers warnings in some files; other minor fixes. 2016-03-28 17:40:08 +00:00
ExecutionEngine More more change need as part of r264187 where ErrorOr<> was added 2016-03-23 21:20:16 +00:00
Fuzzer [libFuzzer] more docs 2016-03-29 23:07:36 +00:00
IR Introduce a @llvm.experimental.guard intrinsic 2016-03-31 00:18:46 +00:00
IRReader Remove autoconf support 2016-01-26 21:29:08 +00:00
LTO ThinLTO: use the callgraph from the combined index to drive the FunctionImporter 2016-03-26 05:40:34 +00:00
LibDriver Remove autoconf support 2016-01-26 21:29:08 +00:00
LineEditor Fix Clang-tidy modernize-deprecated-headers warnings in some files; other minor fixes. 2016-03-28 17:40:08 +00:00
Linker [ThinLTO] Remove post-pass metadata linking support 2016-03-29 18:24:19 +00:00
MC Handle section vs global name conflict. 2016-03-28 20:36:28 +00:00
Object Remove else after return 2016-03-28 17:45:48 +00:00
ObjectYAML [lanai] Add Lanai backend. 2016-03-28 13:09:54 +00:00
Option Annotate dump() methods with LLVM_DUMP_METHOD, addressing Richard Smith r259192 post commit comment. 2016-01-29 20:50:44 +00:00
Passes [PM] Rename the CRTP mixin base classes for the new pass manager to 2016-03-11 10:33:22 +00:00
ProfileData [PGO] PGOFuncName in LTO optimizations 2016-03-30 18:37:52 +00:00
Support C++11 is required, remove some preprocessor checks for it 2016-03-28 11:13:03 +00:00
TableGen [TableGen] Fix typos in comments. NFC 2016-02-26 06:50:27 +00:00
Target [PowerPC] Load two floats directly instead of using one 64-bit integer load 2016-03-31 02:56:05 +00:00
Transforms Introduce a @llvm.experimental.guard intrinsic 2016-03-31 00:18:46 +00:00
CMakeLists.txt Move ObjectYAML code to a new library. 2016-03-01 19:15:06 +00:00
LLVMBuild.txt Add LLVMBuild for ObjectYAML. 2016-03-01 21:29:33 +00:00