Fix getCommonType in a different way from the way I fixed it when
authorChandler Carruth <chandlerc@gmail.com>
Tue, 18 Sep 2012 17:49:37 +0000 (17:49 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Tue, 18 Sep 2012 17:49:37 +0000 (17:49 +0000)
working on FCA splitting. Instead of refusing to form a common type when
there are uses of a subsection of the alloca as well as a use of the
entire alloca, just skip the subsection uses and continue looking for
a whole-alloca use with a type that we can use.

This produces slightly prettier IR I think, and also fixes the other
failure in the test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164146 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/SROA.cpp
test/Transforms/SROA/basictest.ll

index 3607d4cc8c660df6eaad3e408c4817a86267b6c5..c959560b188062269cda9354fabdd4aba95db6d0 100644 (file)
@@ -1059,7 +1059,7 @@ Type *AllocaPartitioning::getCommonType(iterator I) const {
     if (isa<IntrinsicInst>(*UI->User))
       continue;
     if (UI->BeginOffset != I->BeginOffset || UI->EndOffset != I->EndOffset)
-      return 0;
+      continue;
 
     Type *UserTy = 0;
     if (LoadInst *LI = dyn_cast<LoadInst>(&*UI->User)) {
index 43f791ea1c3e704b7e45187dd9dd5cdfe695bbde..49921aa58794a54ceb1568268ac2c12c2229b091 100644 (file)
@@ -1,6 +1,6 @@
 ; RUN: opt < %s -sroa -S | FileCheck %s
 ; RUN: opt < %s -sroa -force-ssa-updater -S | FileCheck %s
-; XFAIL: *
+
 target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n8:16:32:64"
 
 declare void @llvm.lifetime.start(i64, i8* nocapture)
@@ -409,7 +409,7 @@ declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind
 
 define i16 @test5() {
 ; CHECK: @test5
-; CHECK: alloca i32
+; CHECK: alloca float
 ; CHECK: ret i16 %
 
 entry: