[PATCH] Keep TBAA info when rewriting load and store DAG nodes
Richard Sandiford
rsandifo at linux.vnet.ibm.com
Fri Oct 11 06:03:22 PDT 2013
Most SelectionDAG code drops the TBAA info when creating a new form of a load and store (e.g. during legalisation, or when converting a plain load to an extending one). This patch tries to catch all cases where the TBAA information can legitimately be carried over.
There is nice getTruncStore() function that allows the original MachineMemOperand to be passed instead of the individual fields. The patch adds a similar thing for getLoad() and getExtLoad().
The idea is to use the MachineMemOperand forms when all fields are carried over (size, pointer info, isVolatile, isNonTemporal, alignment and TBAA info). If some adjustment is being made, e.g. to narrow the load, then we still pass the individual fields but also pass the TBAA info.
This is trying to update all uses in SelectionDAG/, so I don't have a testcase for all of them. But the patch includes an example where the change helps for SystemZ. (I'm hoping to make useAA() the default for SystemZ if this goes in, but that's a separate change. I'll drop the explicit -combiner-* flags when that happens.)
http://llvm-reviews.chandlerc.com/D1894
Files:
include/llvm/CodeGen/SelectionDAG.h
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp
lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
lib/CodeGen/SelectionDAG/SelectionDAG.cpp
test/CodeGen/SystemZ/alias-01.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1894.1.patch
Type: text/x-patch
Size: 64508 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131011/1e7bd7e3/attachment.bin>
More information about the llvm-commits
mailing list