This upstreams the Cpp emitter, initially presented with [1], from [2] to MLIR core. Together with the previously upstreamed EmitC dialect [3], the target allows to translate MLIR to C/C++. [1] https://reviews.llvm.org/D76571 [2] https://github.com/iml130/mlir-emitc [3] https://reviews.llvm.org/D103969 Co-authored-by: Jacques Pienaar <jpienaar@google.com> Co-authored-by: Simon Camphausen <simon.camphausen@iml.fraunhofer.de> Co-authored-by: Oliver Scherf <oliver.scherf@iml.fraunhofer.de> Reviewed By: jpienaar Differential Revision: https://reviews.llvm.org/D104632
27 lines
1.1 KiB
MLIR
27 lines
1.1 KiB
MLIR
// RUN: mlir-translate -mlir-to-cpp %s | FileCheck %s -check-prefix=CPP-DEFAULT
|
|
// RUN: mlir-translate -mlir-to-cpp -declare-variables-at-top %s | FileCheck %s -check-prefix=CPP-DECLTOP
|
|
|
|
|
|
func @emitc_constant() {
|
|
%c0 = "emitc.constant"(){value = #emitc.opaque<""> : i32} : () -> i32
|
|
%c1 = "emitc.constant"(){value = 42 : i32} : () -> i32
|
|
%c2 = "emitc.constant"(){value = #emitc.opaque<""> : !emitc.opaque<"int32_t*">} : () -> !emitc.opaque<"int32_t*">
|
|
%c3 = "emitc.constant"(){value = #emitc.opaque<"NULL"> : !emitc.opaque<"int32_t*">} : () -> !emitc.opaque<"int32_t*">
|
|
return
|
|
}
|
|
// CPP-DEFAULT: void emitc_constant() {
|
|
// CPP-DEFAULT-NEXT: int32_t [[V0:[^ ]*]];
|
|
// CPP-DEFAULT-NEXT: int32_t [[V1:[^ ]*]] = 42;
|
|
// CPP-DEFAULT-NEXT: int32_t* [[V2:[^ ]*]];
|
|
// CPP-DEFAULT-NEXT: int32_t* [[V3:[^ ]*]] = NULL;
|
|
|
|
// CPP-DECLTOP: void emitc_constant() {
|
|
// CPP-DECLTOP-NEXT: int32_t [[V0:[^ ]*]];
|
|
// CPP-DECLTOP-NEXT: int32_t [[V1:[^ ]*]];
|
|
// CPP-DECLTOP-NEXT: int32_t* [[V2:[^ ]*]];
|
|
// CPP-DECLTOP-NEXT: int32_t* [[V3:[^ ]*]];
|
|
// CPP-DECLTOP-NEXT: ;
|
|
// CPP-DECLTOP-NEXT: [[V1]] = 42;
|
|
// CPP-DECLTOP-NEXT: ;
|
|
// CPP-DECLTOP-NEXT: [[V3]] = NULL;
|