brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 92b3bd8 Raw
85 lines · plain
1! This file tests the -Rpass family of flags (-Rpass, -Rpass-missed2! and -Rpass-analysis)3! loop-delete isn't enabled at O0 so we use at least O14 5! DEFINE: %{output} = -emit-llvm -flang-deprecated-no-hlfir -o /dev/null 2>&16 7! Check fc1 can handle -Rpass8! RUN: %flang_fc1 %s -O1 -vectorize-loops -Rpass %{output} 2>&1 | FileCheck %s --check-prefix=REMARKS9 10! Check that we can override -Rpass= with -Rno-pass.11! RUN: %flang_fc1 %s -O1 -vectorize-loops -Rpass -Rno-pass %{output} 2>&1 | FileCheck %s --allow-empty --check-prefix=NO-REMARKS12 13! Check -Rno-pass, -Rno-pass-analysis, -Rno-pass-missed nothing emitted14! RUN: %flang %s -O2 -Rno-pass -S %{output} 2>&1 | FileCheck %s --allow-empty --check-prefix=NO-REMARKS15! RUN: %flang %s -O2 -Rno-pass-missed -S %{output} 2>&1 | FileCheck %s --allow-empty --check-prefix=NO-REMARKS16! RUN: %flang %s -O2 -Rno-pass-analysis -S %{output} 2>&1 | FileCheck %s --allow-empty --check-prefix=NO-REMARKS17 18! Check valid -Rpass regex19! RUN: %flang %s -O2 -Rpass=loop -S %{output} 2>&1 | FileCheck %s --check-prefix=PASS-REGEX-LOOP-ONLY20 21! Check valid -Rpass-missed regex22! UNSUPPORTED: target=riscv{{.*}}23! RUN: %flang %s -O2 -Rpass-missed=loop -S %{output} 2>&1 | FileCheck %s --check-prefix=MISSED-REGEX-LOOP-ONLY24 25! Check valid -Rpass-analysis regex26! RUN: %flang %s -O2 -Rpass-analysis=loop -S %{output} 2>&1 | FileCheck %s --check-prefix=ANALYSIS-REGEX-LOOP-ONLY27 28! Check full -Rpass message is emitted29! RUN: %flang %s -O2 -Rpass -S %{output} 2>&1 | FileCheck %s --check-prefix=PASS30 31! Check full -Rpass-missed message is emitted32! RUN: %flang %s -O2 -Rpass-missed -S %{output} 2>&1 | FileCheck %s --check-prefix=MISSED33 34! Check full -Rpass-analysis message is emitted35! RUN: %flang %s -O2 -Rpass-analysis -S -o /dev/null 2>&1 | FileCheck %s --check-prefix=ANALYSIS36 37! REMARKS: remark:38! NO-REMARKS-NOT: remark:39 40 41! With plain -Rpass, -Rpass-missed or -Rpass-analysis, we expect remarks related to 2 opportunities (loop vectorisation / loop delete and load hoisting).42! Once we start filtering, this is reduced to 1 one of the loop passes.43 44! PASS-REGEX-LOOP-ONLY-NOT:     optimization-remark.f90:78:7: remark: hoisting load [-Rpass=licm]45! PASS-REGEX-LOOP-ONLY:         optimization-remark.f90:80:5: remark: Loop deleted because it is invariant [-Rpass=loop-delete]46 47! MISSED-REGEX-LOOP-ONLY-NOT:   optimization-remark.f90:78:7: remark: failed to hoist load with loop-invariant address because load is conditionally executed [-Rpass-missed=licm]48! MISSED-REGEX-LOOP-ONLY:       optimization-remark.f90:73:4: remark: loop not vectorized [-Rpass-missed=loop-vectorize]49 50 51! ANALYSIS-REGEX-LOOP-ONLY:     optimization-remark.f90:75:7: remark: loop not vectorized: unsafe dependent memory operations in loop52! ANALYSIS-REGEX-LOOP-ONLY-NOT: remark: {{.*}}: IR instruction count changed from {{[0-9]+}} to {{[0-9]+}}; Delta: {{-?[0-9]+}} [-Rpass-analysis=size-info]53 54! PASS:                         optimization-remark.f90:80:5: remark: Loop deleted because it is invariant [-Rpass=loop-delete]55 56! MISSED:                       optimization-remark.f90:74:7: remark: failed to hoist load with loop-invariant address57! MISSED:                       optimization-remark.f90:73:4: remark: loop not vectorized [-Rpass-missed=loop-vectorize]58! MISSED-NOT:                   optimization-remark.f90:76:7: remark: loop not vectorized: unsafe dependent memory operations in loop. Use #pragma clang loop distribute(enable) to allow loop distribution to attempt to isolate the offending operations into a separate loop59! MISSED-NOT:                   Unknown data dependence. Memory location is the same as accessed at optimization-remark.f90:78:7 [-Rpass-analysis=loop-vectorize]60 61! ANALYSIS:                     optimization-remark.f90:75:7: remark: loop not vectorized: unsafe dependent memory operations in loop.62! ANALYSIS:                     remark: {{.*}} instructions in function [-Rpass-analysis=asm-printer]63 64subroutine swap_real(a1, a2)65   implicit none66 67   real, dimension(1:2) :: aR168   integer :: i, n69   real, intent(inout) :: a1(:), a2(:)70   real :: a71 72!  Swap73   do i = 1, min(size(a1), size(a2))74      a = a1(i)75      a1(i) = a2(i)76      a2(i) = a77   end do78 79! Do a random loop to generate a successful loop-delete pass80    do n = 1,281        aR1(n) = n * 1.3482    end do83 84end subroutine swap_real85