[PATCH] Merge r236457 and r236635: fix vector tail calls

Tim Northover t.p.northover at gmail.com
Tue Jun 9 05:51:55 PDT 2015


These two should be reasonably low risk (when combined, the second fixes the first). Thanks to Simon for reminding me

REPOSITORY
  rL LLVM

http://reviews.llvm.org/D10338

Files:
  lib/CodeGen/Analysis.cpp
  test/CodeGen/AArch64/tail-call.ll

Index: lib/CodeGen/Analysis.cpp
===================================================================
--- lib/CodeGen/Analysis.cpp
+++ lib/CodeGen/Analysis.cpp
@@ -295,7 +295,8 @@
     } else if (const InsertValueInst *IVI = dyn_cast<InsertValueInst>(V)) {
       // Value may come from either the aggregate or the scalar
       ArrayRef<unsigned> InsertLoc = IVI->getIndices();
-      if (std::equal(InsertLoc.rbegin(), InsertLoc.rend(),
+      assert(ValLoc.size() >= InsertLoc.size() && "extracting too deeply");
+      if (std::equal(InsertLoc.begin(), InsertLoc.end(),
                      ValLoc.rbegin())) {
         // The type being inserted is a nested sub-type of the aggregate; we
         // have to remove those initial indices to get the location we're
Index: test/CodeGen/AArch64/tail-call.ll
===================================================================
--- test/CodeGen/AArch64/tail-call.ll
+++ test/CodeGen/AArch64/tail-call.ll
@@ -103,3 +103,22 @@
   tail call void @callee_weak()
   ret void
 }
+
+declare { [2 x float] } @get_vec2()
+
+define { [3 x float] } @test_add_elem() {
+; CHECK-LABEL: test_add_elem:
+; CHECK: bl get_vec2
+; CHECK: fmov s2, #1.0
+; CHECK: ret
+
+  %call = tail call { [2 x float] } @get_vec2()
+  %arr = extractvalue { [2 x float] } %call, 0
+  %arr.0 = extractvalue [2 x float] %arr, 0
+  %arr.1 = extractvalue [2 x float] %arr, 1
+
+  %res.0 = insertvalue { [3 x float] } undef, float %arr.0, 0, 0
+  %res.01 = insertvalue { [3 x float] } %res.0, float %arr.1, 0, 1
+  %res.012 = insertvalue { [3 x float] } %res.01, float 1.000000e+00, 0, 2
+  ret { [3 x float] } %res.012
+}

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D10338.27375.patch
Type: text/x-patch
Size: 1632 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150609/80625218/attachment.bin>


More information about the llvm-commits mailing list