|
| 1 | +// RUN: mlir-translate -mlir-to-llvmir %s -debug-only=llvm-dialect-to-llvm-ir 2>&1 | FileCheck %s |
| 2 | + |
| 3 | +// CHECK: Convert initializer for dup_const |
| 4 | +// CHECK: 6 new constants hit |
| 5 | +// CHECK: 3 dangling constants erased |
| 6 | +// CHECK: Convert initializer for unique_const |
| 7 | +// CHECK: 6 new constants hit |
| 8 | +// CHECK: 5 dangling constants erased |
| 9 | + |
| 10 | + |
| 11 | +// CHECK:@dup_const = global { [2 x double], [2 x double], [2 x double] } { [2 x double] [double 3.612250e-02, double 5.119230e-02], [2 x double] [double 3.612250e-02, double 5.119230e-02], [2 x double] [double 3.612250e-02, double 5.119230e-02] } |
| 12 | + |
| 13 | +llvm.mlir.global @dup_const() : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> { |
| 14 | + %c0 = llvm.mlir.constant(3.612250e-02 : f64) : f64 |
| 15 | + %c1 = llvm.mlir.constant(5.119230e-02 : f64) : f64 |
| 16 | + |
| 17 | + %empty0 = llvm.mlir.undef : !llvm.array<2 x f64> |
| 18 | + %a00 = llvm.insertvalue %c0, %empty0[0] : !llvm.array<2 x f64> |
| 19 | + |
| 20 | + %empty1 = llvm.mlir.undef : !llvm.array<2 x f64> |
| 21 | + %a10 = llvm.insertvalue %c0, %empty1[0] : !llvm.array<2 x f64> |
| 22 | + |
| 23 | + %empty2 = llvm.mlir.undef : !llvm.array<2 x f64> |
| 24 | + %a20 = llvm.insertvalue %c0, %empty2[0] : !llvm.array<2 x f64> |
| 25 | + |
| 26 | +// NOTE: a00, a10, a20 are all same ConstantAggregate which not used at this point. |
| 27 | +// should not delete it before all of the uses of the ConstantAggregate finished. |
| 28 | + |
| 29 | + %a01 = llvm.insertvalue %c1, %a00[1] : !llvm.array<2 x f64> |
| 30 | + %a11 = llvm.insertvalue %c1, %a10[1] : !llvm.array<2 x f64> |
| 31 | + %a21 = llvm.insertvalue %c1, %a20[1] : !llvm.array<2 x f64> |
| 32 | + %empty_r = llvm.mlir.undef : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> |
| 33 | + %r0 = llvm.insertvalue %a01, %empty_r[0] : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> |
| 34 | + %r1 = llvm.insertvalue %a11, %r0[1] : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> |
| 35 | + %r2 = llvm.insertvalue %a21, %r1[2] : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> |
| 36 | + |
| 37 | + llvm.return %r2 : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> |
| 38 | + } |
| 39 | + |
| 40 | +// CHECK:@unique_const = global { [2 x double], [2 x double], [2 x double] } { [2 x double] [double 3.612250e-02, double 5.119230e-02], [2 x double] [double 3.312250e-02, double 5.219230e-02], [2 x double] [double 3.412250e-02, double 5.419230e-02] } |
| 41 | + |
| 42 | +llvm.mlir.global @unique_const() : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> { |
| 43 | + %c0 = llvm.mlir.constant(3.612250e-02 : f64) : f64 |
| 44 | + %c1 = llvm.mlir.constant(5.119230e-02 : f64) : f64 |
| 45 | + |
| 46 | + %c2 = llvm.mlir.constant(3.312250e-02 : f64) : f64 |
| 47 | + %c3 = llvm.mlir.constant(5.219230e-02 : f64) : f64 |
| 48 | + |
| 49 | + %c4 = llvm.mlir.constant(3.412250e-02 : f64) : f64 |
| 50 | + %c5 = llvm.mlir.constant(5.419230e-02 : f64) : f64 |
| 51 | + |
| 52 | + %2 = llvm.mlir.undef : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> |
| 53 | + |
| 54 | + %3 = llvm.mlir.undef : !llvm.array<2 x f64> |
| 55 | + |
| 56 | + %4 = llvm.insertvalue %c0, %3[0] : !llvm.array<2 x f64> |
| 57 | + %5 = llvm.insertvalue %c1, %4[1] : !llvm.array<2 x f64> |
| 58 | + |
| 59 | + %6 = llvm.insertvalue %5, %2[0] : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> |
| 60 | + |
| 61 | + %7 = llvm.insertvalue %c2, %3[0] : !llvm.array<2 x f64> |
| 62 | + %8 = llvm.insertvalue %c3, %7[1] : !llvm.array<2 x f64> |
| 63 | + |
| 64 | + %9 = llvm.insertvalue %8, %6[1] : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> |
| 65 | + |
| 66 | + %10 = llvm.insertvalue %c4, %3[0] : !llvm.array<2 x f64> |
| 67 | + %11 = llvm.insertvalue %c5, %10[1] : !llvm.array<2 x f64> |
| 68 | + |
| 69 | + %12 = llvm.insertvalue %11, %9[2] : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> |
| 70 | + |
| 71 | + llvm.return %12 : !llvm.struct<(array<2 x f64>, array<2 x f64>, array<2 x f64>)> |
| 72 | +} |
0 commit comments