xref: /llvm-project/mlir/test/mlir-runner/global-constructors.mlir (revision eb206e9ea84eff0a0596fed2de8316d924f946d1)
1*eb206e9eSAndrea Faulds// UNSUPPORTED: target=aarch64{{.*}}, target=arm64{{.*}}
2*eb206e9eSAndrea Faulds// RUN: mlir-runner %s -e entry -entry-point-result=void  \
3*eb206e9eSAndrea Faulds// RUN: -shared-libs=%mlir_c_runner_utils | \
4*eb206e9eSAndrea Faulds// RUN: FileCheck %s
5*eb206e9eSAndrea Faulds
6*eb206e9eSAndrea Faulds// Test that the `ctor` executes before `entry` and that `dtor` executes last.
7*eb206e9eSAndrea Fauldsmodule {
8*eb206e9eSAndrea Faulds  llvm.func @printNewline()
9*eb206e9eSAndrea Faulds  llvm.func @printI64(i64)
10*eb206e9eSAndrea Faulds  llvm.mlir.global_ctors {ctors = [@ctor], priorities = [0 : i32]}
11*eb206e9eSAndrea Faulds  llvm.mlir.global_dtors {dtors = [@dtor], priorities = [0 : i32]}
12*eb206e9eSAndrea Faulds  llvm.func @ctor() {
13*eb206e9eSAndrea Faulds    %0 = llvm.mlir.constant(1 : i64) : i64
14*eb206e9eSAndrea Faulds    llvm.call @printI64(%0) : (i64) -> ()
15*eb206e9eSAndrea Faulds    llvm.call @printNewline() : () -> ()
16*eb206e9eSAndrea Faulds    // CHECK: 1
17*eb206e9eSAndrea Faulds    llvm.return
18*eb206e9eSAndrea Faulds  }
19*eb206e9eSAndrea Faulds  llvm.func @entry() {
20*eb206e9eSAndrea Faulds    %0 = llvm.mlir.constant(2 : i64) : i64
21*eb206e9eSAndrea Faulds    llvm.call @printI64(%0) : (i64) -> ()
22*eb206e9eSAndrea Faulds    llvm.call @printNewline() : () -> ()
23*eb206e9eSAndrea Faulds    // CHECK: 2
24*eb206e9eSAndrea Faulds    llvm.return
25*eb206e9eSAndrea Faulds  }
26*eb206e9eSAndrea Faulds  llvm.func @dtor() {
27*eb206e9eSAndrea Faulds    %0 = llvm.mlir.constant(3 : i64) : i64
28*eb206e9eSAndrea Faulds    llvm.call @printI64(%0) : (i64) -> ()
29*eb206e9eSAndrea Faulds    llvm.call @printNewline() : () -> ()
30*eb206e9eSAndrea Faulds    // CHECK: 3
31*eb206e9eSAndrea Faulds    llvm.return
32*eb206e9eSAndrea Faulds  }
33*eb206e9eSAndrea Faulds}
34