diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SROA.cpp | 10 | ||||
| -rw-r--r-- | llvm/test/Transforms/SROA/reuse_lifetime_markers.ll | 69 | 
2 files changed, 2 insertions, 77 deletions
diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index a36b3c50ea3..4b816832c31 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -3072,13 +3072,6 @@ private:      LLVM_DEBUG(dbgs() << "    original: " << II << "\n");      assert(II.getArgOperand(1) == OldPtr); -    bool EntireRange = (NewBeginOffset == NewAllocaBeginOffset && -                        NewEndOffset == NewAllocaEndOffset); - -    // If the new lifetime marker would not differ from the old, just keep it. -    if (&OldAI == &NewAI && EntireRange) -      return true; -      // Record this instruction for deletion.      Pass.DeadInsts.insert(&II); @@ -3089,7 +3082,8 @@ private:      // promoted, but PromoteMemToReg doesn't handle that case.)      // FIXME: Check whether the alloca is promotable before dropping the      // lifetime intrinsics? -    if (!EntireRange) +    if (NewBeginOffset != NewAllocaBeginOffset || +        NewEndOffset != NewAllocaEndOffset)        return true;      ConstantInt *Size = diff --git a/llvm/test/Transforms/SROA/reuse_lifetime_markers.ll b/llvm/test/Transforms/SROA/reuse_lifetime_markers.ll deleted file mode 100644 index 0bfaf6ebaba..00000000000 --- a/llvm/test/Transforms/SROA/reuse_lifetime_markers.ll +++ /dev/null @@ -1,69 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt < %s -sroa -S | FileCheck %s -; -; Make sure we reuse the lifetime marker and do not create a new one that looks the same but without the call site attributes. -target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" - -; Function Attrs: argmemonly nounwind willreturn -declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #0 - -; Function Attrs: argmemonly nounwind willreturn -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #0 - -define hidden void @old_markers() { -; -; CHECK-LABEL: define {{[^@]+}}@old_markers( -; CHECK-NEXT:  entry: -; CHECK-NEXT:    [[VV_SROA_4:%.*]] = alloca [3 x i32*] -; CHECK-NEXT:    [[VV_SROA_4_0__SROA_CAST61:%.*]] = bitcast [3 x i32*]* [[VV_SROA_4]] to i8* -; CHECK-NEXT:    [[VV_SROA_4_0__SROA_CAST94:%.*]] = bitcast [3 x i32*]* [[VV_SROA_4]] to i8* -; CHECK-NEXT:    call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull align 8 dereferenceable(24) [[VV_SROA_4_0__SROA_CAST94]]) -; CHECK-NEXT:    br i1 undef, label [[DO_BODY:%.*]], label [[IF_END31:%.*]] -; CHECK:       do.body: -; CHECK-NEXT:    ret void -; CHECK:       if.end31: -; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nonnull align 8 dereferenceable(24) [[VV_SROA_4_0__SROA_CAST61]], i8* noalias nonnull align 8 undef, i64 24, i1 false) -; CHECK-NEXT:    unreachable -; -entry: -  %vv.sroa.4 = alloca [3 x i32*] -  %vv.sroa.4.0..sroa_cast61 = bitcast [3 x i32*]* %vv.sroa.4 to i8* -  %vv.sroa.4.0..sroa_cast94 = bitcast [3 x i32*]* %vv.sroa.4 to i8* -  call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull align 8 dereferenceable(24) %vv.sroa.4.0..sroa_cast94) -  br i1 undef, label %do.body, label %if.end31 - -do.body:                                          ; preds = %entry -  ret void - -if.end31:                                         ; preds = %entry -  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nonnull align 8 dereferenceable(24) %vv.sroa.4.0..sroa_cast61, i8* noalias nonnull align 8 undef, i64 24, i1 false) -  unreachable -} - -define hidden void @new_markers() { -; -; CHECK-LABEL: define {{[^@]+}}@new_markers( -; CHECK-NEXT:  entry: -; CHECK-NEXT:    [[VV_SROA_4:%.*]] = alloca [3 x i32*] -; CHECK-NEXT:    [[VV_SROA_4_0__SROA_CAST61:%.*]] = bitcast [3 x i32*]* [[VV_SROA_4]] to i8* -; CHECK-NEXT:    br i1 undef, label [[DO_BODY:%.*]], label [[IF_END31:%.*]] -; CHECK:       do.body: -; CHECK-NEXT:    ret void -; CHECK:       if.end31: -; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nonnull align 8 dereferenceable(24) [[VV_SROA_4_0__SROA_CAST61]], i8* noalias nonnull align 8 undef, i64 24, i1 false) -; CHECK-NEXT:    unreachable -; -entry: -  %vv.sroa.4 = alloca [3 x i32*] -  %vv.sroa.4.0..sroa_cast61 = bitcast [3 x i32*]* %vv.sroa.4 to i8* -  %vv.sroa.4.0..sroa_cast94 = bitcast [3 x i32*]* %vv.sroa.4 to i8* -  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull align 8 dereferenceable(24) %vv.sroa.4.0..sroa_cast94) -  br i1 undef, label %do.body, label %if.end31 - -do.body:                                          ; preds = %entry -  ret void - -if.end31:                                         ; preds = %entry -  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nonnull align 8 dereferenceable(24) %vv.sroa.4.0..sroa_cast61, i8* noalias nonnull align 8 undef, i64 24, i1 false) -  unreachable -}  | 

