alexey-bataev wrote:
Here is a small reproducer:
```
program memcpy_test
implicit none
integer, parameter :: n = 100
real :: a(n), b(n)
integer :: i
! Initialize array a
do i = 1, n
a(i) = real(i)
end do
! Array assignment - this should generate memcpy
b = a
! Use array b to prevent optimization
print *, b(1), b(n)
end program memcpy_test
```
compile with `flang -O2 memcpy_reproducer.f90 -mllvm -print-after-all` on x86
target
```
; *** IR Dump After AnnotationRemarksPass on _QQmain ***
...
store float 9.700000e+01, ptr getelementptr inbounds nuw (i8, ptr @_QFEa, i64
384), align 16, !tbaa !4
store float 9.800000e+01, ptr getelementptr inbounds nuw (i8, ptr @_QFEa, i64
388), align 4, !tbaa !4
store float 9.900000e+01, ptr getelementptr inbounds nuw (i8, ptr @_QFEa, i64
392), align 8, !tbaa !4
store float 1.000000e+02, ptr getelementptr inbounds nuw (i8, ptr @_QFEa, i64
396), align 4, !tbaa !4
tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16
dereferenceable(400) @_QFEb, ptr noundef nonnull align 16 dereferenceable(400)
@_QFEa, i64 400, i1 false), !tbaa !11
...
```
after Pre-ISel
```
*** IR Dump After Pre-ISel Intrinsic Lowering (pre-isel-intrinsic-lowering) ***
...
store float 9.700000e+01, ptr getelementptr inbounds nuw (i8, ptr @_QFEa, i64
384), align 16, !tbaa !4
store float 9.800000e+01, ptr getelementptr inbounds nuw (i8, ptr @_QFEa, i64
388), align 4, !tbaa !4
store float 9.900000e+01, ptr getelementptr inbounds nuw (i8, ptr @_QFEa, i64
392), align 8, !tbaa !4
store float 1.000000e+02, ptr getelementptr inbounds nuw (i8, ptr @_QFEa, i64
396), align 4, !tbaa !4
br label %static-memcpy-expansion-main-body
static-memcpy-expansion-main-body: ; preds =
%static-memcpy-expansion-main-body, %vector.ph
%loop-index = phi i64 [ 0, %vector.ph ], [ %3,
%static-memcpy-expansion-main-body ]
%0 = getelementptr inbounds i8, ptr @_QFEa, i64 %loop-index
%1 = load i8, ptr %0, align 1
%2 = getelementptr inbounds i8, ptr @_QFEb, i64 %loop-index
store i8 %1, ptr %2, align 1
%3 = add i64 %loop-index, 1
%4 = icmp ult i64 %3, 400
br i1 %4, label %static-memcpy-expansion-main-body, label
%static-memcpy-post-expansion
static-memcpy-post-expansion:
...
```
https://github.com/llvm/llvm-project/pull/171452
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits