summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/CodeGen/Analysis.cpp5
-rw-r--r--llvm/test/CodeGen/AArch64/tail-call.ll19
2 files changed, 21 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/Analysis.cpp b/llvm/lib/CodeGen/Analysis.cpp
index ac0d40ec3a7..3224fac25cb 100644
--- a/llvm/lib/CodeGen/Analysis.cpp
+++ b/llvm/lib/CodeGen/Analysis.cpp
@@ -295,9 +295,8 @@ static const Value *getNoopInput(const Value *V,
} else if (const InsertValueInst *IVI = dyn_cast<InsertValueInst>(V)) {
// Value may come from either the aggregate or the scalar
ArrayRef<unsigned> InsertLoc = IVI->getIndices();
- assert(ValLoc.size() >= InsertLoc.size() && "extracting too deeply");
- if (std::equal(InsertLoc.begin(), InsertLoc.end(),
- ValLoc.rbegin())) {
+ if (ValLoc.size() >= InsertLoc.size() &&
+ 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
// interested in for the operand.
diff --git a/llvm/test/CodeGen/AArch64/tail-call.ll b/llvm/test/CodeGen/AArch64/tail-call.ll
index 700eec77636..e5766154bb4 100644
--- a/llvm/test/CodeGen/AArch64/tail-call.ll
+++ b/llvm/test/CodeGen/AArch64/tail-call.ll
@@ -122,3 +122,22 @@ define { [3 x float] } @test_add_elem() {
%res.012 = insertvalue { [3 x float] } %res.01, float 1.000000e+00, 0, 2
ret { [3 x float] } %res.012
}
+
+declare double @get_double()
+define { double, [2 x double] } @test_mismatched_insert() {
+; CHECK-LABEL: test_mismatched_insert:
+; CHECK: bl get_double
+; CHECK: bl get_double
+; CHECK: bl get_double
+; CHECK: ret
+
+ %val0 = call double @get_double()
+ %val1 = call double @get_double()
+ %val2 = tail call double @get_double()
+
+ %res.0 = insertvalue { double, [2 x double] } undef, double %val0, 0
+ %res.01 = insertvalue { double, [2 x double] } %res.0, double %val1, 1, 0
+ %res.012 = insertvalue { double, [2 x double] } %res.01, double %val2, 1, 1
+
+ ret { double, [2 x double] } %res.012
+}
OpenPOWER on IntegriCloud