| ; 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 |
| } |