|
1 | | -; RUN: %opt < %s %loadEnzyme -enzyme -instcombine -S | FileCheck %s |
2 | | -; RUN: %opt < %s %newLoadEnzyme -passes="enzyme,instcombine" -S | FileCheck %s |
| 1 | +; RUN: %opt < %s %loadEnzyme -enzyme -instsimplify -S | FileCheck %s |
| 2 | +; RUN: %opt < %s %newLoadEnzyme -passes="enzyme,function(instsimplify)" -S | FileCheck %s |
3 | 3 |
|
4 | 4 | declare dso_local double @_Z5loadel(i64 %l) |
5 | 5 |
|
6 | 6 | declare dso_local void @_Z6storerld(i64 %l, double %v) |
7 | 7 |
|
8 | 8 | ; Function Attrs: uwtable mustprogress |
9 | 9 | define dso_local double @_Z4testv() { |
10 | | - %1 = call double* @_Z16__enzyme_todensePvS_(i8* bitcast (double (i64)* @_Z5loadel to i8*), i8* bitcast (void (i64, double)* @_Z6storerld to i8*)) |
11 | | - br label %3 |
| 10 | +entry: |
| 11 | + %td = call double* @_Z16__enzyme_todensePvS_(i8* bitcast (double (i64)* @_Z5loadel to i8*), i8* bitcast (void (i64, double)* @_Z6storerld to i8*)) |
| 12 | + br label %loop |
12 | 13 |
|
13 | | -2: ; preds = %3 |
14 | | - ret double %12 |
| 14 | +rb: ; preds = %3 |
| 15 | + ret double %a12 |
15 | 16 |
|
16 | | -3: ; preds = %0, %3 |
17 | | - %4 = phi i64 [ 0, %0 ], [ %13, %3 ] |
18 | | - %5 = phi double [ 0.000000e+00, %0 ], [ %12, %3 ] |
19 | | - %6 = mul nuw nsw i64 %4, 1000 |
20 | | - %7 = getelementptr inbounds double, double* %1, i64 %6 |
21 | | - %8 = load double, double* %7, align 8 |
22 | | - %9 = fadd double %5, %8 |
23 | | - %10 = getelementptr inbounds double, double* %7, i64 1 |
24 | | - %11 = load double, double* %10, align 8 |
25 | | - %12 = fadd double %9, %11 |
26 | | - %13 = add nuw nsw i64 %4, 1 |
27 | | - %14 = icmp eq i64 %13, 10000 |
28 | | - br i1 %14, label %2, label %3 |
| 17 | +loop: ; preds = %0, %3 |
| 18 | + %a4 = phi i64 [ 0, %entry ], [ %a13, %loop ] |
| 19 | + %a5 = phi double [ 0.000000e+00, %entry ], [ %a12, %loop ] |
| 20 | + %a6 = mul nuw nsw i64 %a4, 1000 |
| 21 | + %a7 = getelementptr inbounds double, double* %td, i64 %a6 |
| 22 | + %a8 = load double, double* %a7, align 8 |
| 23 | + %a9 = fadd double %a5, %a8 |
| 24 | + %a10 = getelementptr inbounds double, double* %a7, i64 1 |
| 25 | + %a11 = load double, double* %a10, align 8 |
| 26 | + %a12 = fadd double %a9, %a11 |
| 27 | + %a13 = add nuw nsw i64 %a4, 1 |
| 28 | + %a14 = icmp eq i64 %a13, 10000 |
| 29 | + br i1 %a14, label %rb, label %loop |
29 | 30 | } |
30 | 31 |
|
31 | 32 | declare dso_local double* @_Z16__enzyme_todensePvS_(i8*, i8*) |
32 | 33 |
|
33 | 34 | ; CHECK: define dso_local double @_Z4testv() { |
34 | | -; CHECK: %3 = phi i64 [ 0, %0 ], [ %11, %2 ] |
35 | | -; CHECK-NEXT: %4 = phi double [ 0.000000e+00, %0 ], [ %10, %2 ] |
36 | | -; CHECK-NEXT: %5 = mul nuw i64 %3, 8000 |
37 | | -; CHECK-NEXT: %6 = call double @_Z5loadel(i64 %5) |
38 | | -; CHECK-NEXT: %7 = fadd double %4, %6 |
39 | | -; CHECK-NEXT: %8 = or i64 %5, 8 |
40 | | -; CHECK-NEXT: %9 = call double @_Z5loadel(i64 %8) |
41 | | -; CHECK-NEXT: %10 = fadd double %7, %9 |
42 | | -; CHECK-NEXT: %11 = add nuw nsw i64 %3, 1 |
43 | | -; CHECK-NEXT: %12 = icmp eq i64 %11, 10000 |
44 | | -; CHECK-NEXT: br i1 %12, label %1, label %2 |
| 35 | +; CHECK: %a4 = phi i64 [ 0, %entry ], [ %a13, %loop ] |
| 36 | +; CHECK-NEXT: %a5 = phi double [ 0.000000e+00, %entry ], [ %a12, %loop ] |
| 37 | +; CHECK-NEXT: %a6 = mul nuw nsw i64 %a4, 1000 |
| 38 | +; CHECK-NEXT: %0 = mul nuw nsw i64 %a6, 8 |
| 39 | +; CHECK-NEXT: %1 = call double @_Z5loadel(i64 %0) |
| 40 | +; CHECK-NEXT: %a9 = fadd double %a5, %1 |
| 41 | +; CHECK-NEXT: %2 = add i64 %0, 8 |
| 42 | +; CHECK-NEXT: %3 = call double @_Z5loadel(i64 %2) |
| 43 | +; CHECK-NEXT: %a12 = fadd double %a9, %3 |
| 44 | +; CHECK-NEXT: %a13 = add nuw nsw i64 %a4, 1 |
| 45 | +; CHECK-NEXT: %a14 = icmp eq i64 %a13, 10000 |
| 46 | +; CHECK-NEXT: br i1 %a14, label %rb, label %loop |
0 commit comments