[DAGCombiner][AMDGPU][Mips] Fold bitcast with volatile loads if the resulting load...
authorCraig Topper <craig.topper@intel.com>
Tue, 28 Aug 2018 03:47:20 +0000 (03:47 +0000)
committerCraig Topper <craig.topper@intel.com>
Tue, 28 Aug 2018 03:47:20 +0000 (03:47 +0000)
commitc7506b28c11b4a382bd499c21ef5e6aac8c3c29f
treee852db7f307fc70d417f2860cf978d5e18a0b7f8
parenta6cd4b9bced862533d5ce7ca4dde18d82b623801
[DAGCombiner][AMDGPU][Mips] Fold bitcast with volatile loads if the resulting load is legal for the target.

Summary:
I'm not sure if this patch is correct or if it needs more qualifying somehow. Bitcast shouldn't change the size of the load so it should be ok? We already do something similar for stores. We'll change the type of a volatile store if the resulting store is Legal or Custom. I'm not sure we should be allowing Custom there...

I was playing around with converting X86 atomic loads/stores(except seq_cst) into regular volatile loads and stores during lowering. This would allow some special RMW isel patterns in X86InstrCompiler.td to be removed. But there's some floating point patterns in there that didn't work because we don't fold (f64 (bitconvert (i64 volatile load))) or (f32 (bitconvert (i32 volatile load))).

Reviewers: efriedma, atanasyan, arsenm

Reviewed By: efriedma

Subscribers: jvesely, arsenm, sdardis, kzhuravl, wdng, yaxunl, dstuttard, tpr, t-tye, arichardson, jrtc27, atanasyan, jfb, llvm-commits

Differential Revision: https://reviews.llvm.org/D50491

llvm-svn: 340797
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/test/CodeGen/AMDGPU/copy-illegal-type.ll
llvm/test/CodeGen/Mips/cconv/return-hard-fp128.ll
llvm/test/CodeGen/Mips/cconv/return-hard-struct-f128.ll
llvm/test/CodeGen/Mips/msa/bitcast.ll