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

Reply via email to