You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
1.3 KiB
31 lines
1.3 KiB
4 months ago
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||
|
; RUN: opt < %s -O2 -S -enable-memcpyopt-memoryssa=0 | FileCheck %s
|
||
|
; RUN: opt < %s -O2 -S -enable-memcpyopt-memoryssa=1 -verify-memoryssa | FileCheck %s
|
||
|
|
||
|
; performCallSlotOptzn in MemCpy should not exchange the calls to
|
||
|
; @llvm.lifetime.start and @llvm.memcpy.
|
||
|
|
||
|
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i1) #1
|
||
|
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1
|
||
|
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1
|
||
|
|
||
|
define void @_ZN4CordC2EOS_(i8* nocapture dereferenceable(16) %arg1) {
|
||
|
; CHECK-LABEL: @_ZN4CordC2EOS_(
|
||
|
; CHECK-NEXT: bb:
|
||
|
; CHECK-NEXT: [[TMP_SROA_3_0_ARG1_SROA_RAW_IDX:%.*]] = getelementptr inbounds i8, i8* [[ARG1:%.*]], i64 7
|
||
|
; CHECK-NEXT: store i8 0, i8* [[TMP_SROA_3_0_ARG1_SROA_RAW_IDX]], align 1
|
||
|
; CHECK-NEXT: ret void
|
||
|
;
|
||
|
bb:
|
||
|
%tmp = alloca [8 x i8], align 8
|
||
|
%tmp5 = bitcast [8 x i8]* %tmp to i8*
|
||
|
call void @llvm.lifetime.start.p0i8(i64 16, i8* %tmp5)
|
||
|
%tmp10 = getelementptr inbounds i8, i8* %tmp5, i64 7
|
||
|
store i8 0, i8* %tmp10, align 1
|
||
|
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %arg1, i8* align 8 %tmp5, i64 16, i1 false)
|
||
|
call void @llvm.lifetime.end.p0i8(i64 16, i8* %tmp5)
|
||
|
ret void
|
||
|
}
|
||
|
|
||
|
attributes #1 = { argmemonly nounwind }
|