[PATCH] D13239: [ARM] Modify codegen for memcpy intrinsic to prefer LDM/STM.
James Molloy via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 1 05:09:20 PDT 2015
jmolloy added a subscriber: jmolloy.
jmolloy requested changes to this revision.
jmolloy added a reviewer: jmolloy.
jmolloy added a comment.
This revision now requires changes to proceed.
Hi Scott,
In general I like this change. It's an elegant solution to the problem. I've got a bikeshed to paint regarding the name - I think MEMCPY might be more appropriate as that's exactly what it's doing.
I think there should be more documentation about the inputs and outputs of the node - it took me a bit to realise that the outputs are the updated base registers (which means you can chain them - neat!)
There also looks to be minimal-zero non-Thumb1 tests for this - this happens in all modes so I'd expect the same amount of testing for each of ARM, T1 and T2.
The instprinter stuff is ugly. But I see why it's needed.
Cheers,
James
================
Comment at: lib/Target/ARM/ARMISelLowering.h:190
@@ +189,3 @@
+ // instructions.
+ MCOPY,
+
----------------
Can we call this MEMCPY instead of MCOPY? It self-describes a bit better, I think.
================
Comment at: lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp:752
@@ +751,3 @@
+ // it now.
+ std::vector<MCOperand> RegOps(MI->size() - OpNum);
+ std::copy(MI->begin() + OpNum, MI->end(), RegOps.begin());
----------------
You should be able to construct the vector using the iterator construction syntax:
std::vector<MCOperand> RegOps(MI->begin() + OpNum, MI->end());
================
Comment at: lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp:754
@@ +753,3 @@
+ std::copy(MI->begin() + OpNum, MI->end(), RegOps.begin());
+ std::sort(RegOps.begin(), RegOps.end(),
+ [this](const MCOperand &O1, const MCOperand &O2) -> bool {
----------------
Use std::stable_sort instead of std::sort, for deterministicness.
http://reviews.llvm.org/D13239
More information about the llvm-commits
mailing list