From 7c8df7aa0c02908a29f0b5e6cfccb531dccdb96b Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 18 Sep 2012 17:49:37 +0000 Subject: [PATCH] Fix getCommonType in a different way from the way I fixed it when 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 | 2 +- test/Transforms/SROA/basictest.ll | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Transforms/Scalar/SROA.cpp b/lib/Transforms/Scalar/SROA.cpp index 3607d4cc8c6..c959560b188 100644 --- a/lib/Transforms/Scalar/SROA.cpp +++ b/lib/Transforms/Scalar/SROA.cpp @@ -1059,7 +1059,7 @@ Type *AllocaPartitioning::getCommonType(iterator I) const { if (isa(*UI->User)) continue; if (UI->BeginOffset != I->BeginOffset || UI->EndOffset != I->EndOffset) - return 0; + continue; Type *UserTy = 0; if (LoadInst *LI = dyn_cast(&*UI->User)) { diff --git a/test/Transforms/SROA/basictest.ll b/test/Transforms/SROA/basictest.ll index 43f791ea1c3..49921aa5879 100644 --- a/test/Transforms/SROA/basictest.ll +++ b/test/Transforms/SROA/basictest.ll @@ -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: -- 2.34.1