117 lines · plain
1! RUN: %flang_fc1 -emit-llvm -o - %s | FileCheck %s2 3! CHECK-LABEL: ivdep_test14subroutine ivdep_test1 5 integer :: a(10)6 !dir$ ivdep 7 ! CHECK: br i1 {{.*}}, label {{.*}}, label {{.*}}8 do i=1,109 a(i)=i10 !CHECK: store i32 {{.*}}, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT:.*]]11 !CHECK: %[[VAL_8:.*]] = load i32, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT]]12 !CHECK: %[[VAL_9:.*]] = sext i32 %[[VAL_8]] to i6413 !CHECK: %[[VAL_10:.*]] = sub nsw i64 %[[VAL_9]], 114 !CHECK: %[[VAL_11:.*]] = mul nsw i64 %[[VAL_10]], 115 !CHECK: %[[VAL_12:.*]] = mul nsw i64 %[[VAL_11]], 116 !CHECK: %[[VAL_13:.*]] = add nsw i64 %[[VAL_12]], 017 !CHECK: %[[VAL_14:.*]] = getelementptr i32, ptr {{.*}}, i64 %[[VAL_13]]18 !CHECK: store i32 %[[VAL_8]], ptr %[[VAL_14]], align 4, !llvm.access.group [[DISTRINCT]]19 !CHECK: %[[VAL_15:.*]] = load i32, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT]]20 !CHECK: %[[VAL_16:.*]] = add nsw i32 %[[VAL_15]], 121 !CHECK: %[[VAL_17:.*]] = sub i64 {{.*}}, 122 !CHECK: br label {{.*}}, !llvm.loop ![[ANNOTATION:.*]]23 end do24end subroutine ivdep_test125 26 27! CHECK-LABEL: ivdep_test228subroutine ivdep_test229 integer :: a(10), b(10), c(10)30 !dir$ ivdep 31 !dir$ unknown32 ! CHECK: br i1 {{.*}}, label {{.*}}, label {{.*}}33 do i=1,1034 a(i)=b(i)+c(i)35 !CHECK: store i32 {{.*}}, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT1:.*]] 36 !CHECK: %[[VAL_10:.*]] = load i32, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT1]]37 !CHECK: %[[VAL_11:.*]] = sext i32 %[[VAL_10]] to i6438 !CHECK: %[[VAL_12:.*]] = sub nsw i64 %[[VAL_11]], 139 !CHECK: %[[VAL_13:.*]] = mul nsw i64 %[[VAL_12]], 140 !CHECK: %[[VAL_14:.*]] = mul nsw i64 %[[VAL_13]], 141 !CHECK: %[[VAL_15:.*]] = add nsw i64 %[[VAL_14]], 042 !CHECK: %[[VAL_16:.*]] = getelementptr i32, ptr {{.*}}, i64 %[[VAL_15]]43 !CHECK: %[[VAL_17:.*]] = load i32, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT1]] 44 !CHECK: %[[VAL_18:.*]] = sub nsw i64 %[[VAL_11]], 145 !CHECK: %[[VAL_19:.*]] = mul nsw i64 %[[VAL_18]], 146 !CHECK: %[[VAL_20:.*]] = mul nsw i64 %[[VAL_19]], 147 !CHECK: %[[VAL_21:.*]] = add nsw i64 %[[VAL_20]], 048 !CHECK: %[[VAL_22:.*]] = getelementptr i32, ptr {{.*}}, i64 %[[VAL_21]]49 !CHECK: %[[VAL_23:.*]] = load i32, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT1]] 50 !CHECK: %[[VAL_24:.*]] = add i32 %[[VAL_17]], %[[VAL_23]]51 !CHECK: %[[VAL_25:.*]] = sub nsw i64 %[[VAL_11]], 152 !CHECK: %[[VAL_26:.*]] = mul nsw i64 %[[VAL_25]], 153 !CHECK: %[[VAL_27:.*]] = mul nsw i64 %[[VAL_26]], 154 !CHECK: %[[VAL_28:.*]] = add nsw i64 %[[VAL_27]], 055 !CHECK: %[[VAL_29:.*]] = getelementptr i32, ptr {{.*}}, i64 %[[VAL_28]]56 !CHECK: store i32 %[[VAL_24]], ptr %[[VAL_29]], align 4, !llvm.access.group [[DISTRINCT1]]57 !CHECK: %[[VAL_30:.*]] = load i32, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT1]] 58 !CHECK: %[[VAL_31:.*]] = add nsw i32 %[[VAL_30]], 159 !CHECK: %[[VAL_32:.*]] = sub i64 {{.*}}, 160 !CHECK: br label {{.*}}, !llvm.loop ![[ANNOTATION1:.*]]61 end do62end subroutine ivdep_test263 64 65! CHECK-LABEL: ivdep_test366subroutine ivdep_test367 integer :: a(10), b(10), c(10)68 !dir$ ivdep 69 ! CHECK: br i1 {{.*}}, label {{.*}}, label {{.*}}70 do i=1,1071 a(i)=b(i)+c(i)72 call foo() 73 !CHECK: store i32 {{.*}}, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT2:.*]] 74 !CHECK: %[[VAL_10:.*]] = load i32, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT2]]75 !CHECK: %[[VAL_11:.*]] = sext i32 %[[VAL_10]] to i6476 !CHECK: %[[VAL_12:.*]] = sub nsw i64 %[[VAL_11]], 177 !CHECK: %[[VAL_13:.*]] = mul nsw i64 %[[VAL_12]], 178 !CHECK: %[[VAL_14:.*]] = mul nsw i64 %[[VAL_13]], 179 !CHECK: %[[VAL_15:.*]] = add nsw i64 %[[VAL_14]], 080 !CHECK: %[[VAL_16:.*]] = getelementptr i32, ptr {{.*}}, i64 %[[VAL_15]]81 !CHECK: %[[VAL_17:.*]] = load i32, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT2]] 82 !CHECK: %[[VAL_18:.*]] = sub nsw i64 %[[VAL_11]], 183 !CHECK: %[[VAL_19:.*]] = mul nsw i64 %[[VAL_18]], 184 !CHECK: %[[VAL_20:.*]] = mul nsw i64 %[[VAL_19]], 185 !CHECK: %[[VAL_21:.*]] = add nsw i64 %[[VAL_20]], 086 !CHECK: %[[VAL_22:.*]] = getelementptr i32, ptr {{.*}}, i64 %[[VAL_21]]87 !CHECK: %[[VAL_23:.*]] = load i32, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT2]] 88 !CHECK: %[[VAL_24:.*]] = add i32 %[[VAL_17]], %[[VAL_23]]89 !CHECK: %[[VAL_25:.*]] = sub nsw i64 %[[VAL_11]], 190 !CHECK: %[[VAL_26:.*]] = mul nsw i64 %[[VAL_25]], 191 !CHECK: %[[VAL_27:.*]] = mul nsw i64 %[[VAL_26]], 192 !CHECK: %[[VAL_28:.*]] = add nsw i64 %[[VAL_27]], 093 !CHECK: %[[VAL_29:.*]] = getelementptr i32, ptr {{.*}}, i64 %[[VAL_28]]94 !CHECK: store i32 %[[VAL_24]], ptr %[[VAL_29]], align 4, !llvm.access.group [[DISTRINCT2]]95 !CHECK: call void @_QFivdep_test3Pfoo(), !llvm.access.group [[DISTRINCT2]]96 !CHECK: %[[VAL_30:.*]] = load i32, ptr {{.*}}, align 4, !llvm.access.group [[DISTRINCT2]] 97 !CHECK: %[[VAL_31:.*]] = add nsw i32 %[[VAL_30]], 198 !CHECK: %[[VAL_32:.*]] = sub i64 {{.*}}, 199 !CHECK: br label {{.*}}, !llvm.loop ![[ANNOTATION2:.*]]100 end do101 contains102 subroutine foo()103 end subroutine104end subroutine ivdep_test3105 106! CHECK: [[DISTRINCT]] = distinct !{}107! CHECK: ![[ANNOTATION]] = distinct !{![[ANNOTATION]], ![[VECTORIZE:.*]], ![[PARALLEL_ACCESSES:.*]]}108! CHECK: ![[VECTORIZE]] = !{!"llvm.loop.vectorize.enable", i1 true}109! CHECK: ![[PARALLEL_ACCESSES]] = !{!"llvm.loop.parallel_accesses", [[DISTRINCT]]}110! CHECK: [[DISTRINCT1]] = distinct !{}111! CHECK: ![[ANNOTATION1]] = distinct !{![[ANNOTATION1]], ![[VECTORIZE:.*]], ![[PARALLEL_ACCESSES1:.*]]}112! CHECK: ![[PARALLEL_ACCESSES1]] = !{!"llvm.loop.parallel_accesses", [[DISTRINCT1]]}113! CHECK: [[DISTRINCT2]] = distinct !{}114! CHECK: ![[ANNOTATION2]] = distinct !{![[ANNOTATION2]], ![[VECTORIZE:.*]], ![[PARALLEL_ACCESSES2:.*]]}115! CHECK: ![[PARALLEL_ACCESSES2]] = !{!"llvm.loop.parallel_accesses", [[DISTRINCT2]]}116 117