2021-07-03 01:03:46 +08:00
|
|
|
//===- llvm.c - Test of llvm APIs -----------------------------------------===//
|
|
|
|
//
|
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM
|
|
|
|
// Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
// RUN: mlir-capi-llvm-test 2>&1 | FileCheck %s
|
|
|
|
|
|
|
|
#include "mlir-c/Dialect/LLVM.h"
|
|
|
|
#include "mlir-c/IR.h"
|
|
|
|
#include "mlir-c/BuiltinTypes.h"
|
|
|
|
|
|
|
|
#include <assert.h>
|
|
|
|
#include <math.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
// CHECK-LABEL: testTypeCreation()
|
|
|
|
static void testTypeCreation(MlirContext ctx) {
|
|
|
|
fprintf(stderr, "testTypeCreation()\n");
|
2021-07-14 05:35:50 +08:00
|
|
|
MlirType i8 = mlirIntegerTypeGet(ctx, 8);
|
2021-07-03 01:03:46 +08:00
|
|
|
MlirType i32 = mlirIntegerTypeGet(ctx, 32);
|
2021-07-14 05:35:50 +08:00
|
|
|
MlirType i64 = mlirIntegerTypeGet(ctx, 64);
|
2021-07-03 01:03:46 +08:00
|
|
|
|
|
|
|
const char *i32p_text = "!llvm.ptr<i32>";
|
|
|
|
MlirType i32p = mlirLLVMPointerTypeGet(i32, 0);
|
|
|
|
MlirType i32p_ref = mlirTypeParseGet(ctx, mlirStringRefCreateFromCString(i32p_text));
|
|
|
|
// CHECK: !llvm.ptr<i32>: 1
|
|
|
|
fprintf(stderr, "%s: %d\n", i32p_text, mlirTypeEqual(i32p, i32p_ref));
|
|
|
|
|
|
|
|
const char *i32p4_text = "!llvm.ptr<i32, 4>";
|
|
|
|
MlirType i32p4 = mlirLLVMPointerTypeGet(i32, 4);
|
|
|
|
MlirType i32p4_ref = mlirTypeParseGet(ctx, mlirStringRefCreateFromCString(i32p4_text));
|
|
|
|
// CHECK: !llvm.ptr<i32, 4>: 1
|
|
|
|
fprintf(stderr, "%s: %d\n", i32p4_text, mlirTypeEqual(i32p4, i32p4_ref));
|
2021-07-14 05:35:50 +08:00
|
|
|
|
|
|
|
const char *voidt_text = "!llvm.void";
|
|
|
|
MlirType voidt = mlirLLVMVoidTypeGet(ctx);
|
|
|
|
MlirType voidt_ref =
|
|
|
|
mlirTypeParseGet(ctx, mlirStringRefCreateFromCString(voidt_text));
|
|
|
|
// CHECK: !llvm.void: 1
|
|
|
|
fprintf(stderr, "%s: %d\n", voidt_text, mlirTypeEqual(voidt, voidt_ref));
|
|
|
|
|
|
|
|
const char *i32_4_text = "!llvm.array<4xi32>";
|
|
|
|
MlirType i32_4 = mlirLLVMArrayTypeGet(i32, 4);
|
|
|
|
MlirType i32_4_ref =
|
|
|
|
mlirTypeParseGet(ctx, mlirStringRefCreateFromCString(i32_4_text));
|
|
|
|
// CHECK: !llvm.array<4xi32>: 1
|
|
|
|
fprintf(stderr, "%s: %d\n", i32_4_text, mlirTypeEqual(i32_4, i32_4_ref));
|
|
|
|
|
|
|
|
const char *i8_i32_i64_text = "!llvm.func<i8 (i32, i64)>";
|
|
|
|
const MlirType i32_i64_arr[] = {i32, i64};
|
|
|
|
MlirType i8_i32_i64 = mlirLLVMFunctionTypeGet(i8, 2, i32_i64_arr, false);
|
|
|
|
MlirType i8_i32_i64_ref =
|
|
|
|
mlirTypeParseGet(ctx, mlirStringRefCreateFromCString(i8_i32_i64_text));
|
|
|
|
// CHECK: !llvm.func<i8 (i32, i64)>: 1
|
|
|
|
fprintf(stderr, "%s: %d\n", i8_i32_i64_text,
|
|
|
|
mlirTypeEqual(i8_i32_i64, i8_i32_i64_ref));
|
|
|
|
|
|
|
|
const char *i32_i64_s_text = "!llvm.struct<(i32, i64)>";
|
|
|
|
MlirType i32_i64_s = mlirLLVMStructTypeLiteralGet(ctx, 2, i32_i64_arr, false);
|
|
|
|
MlirType i32_i64_s_ref =
|
|
|
|
mlirTypeParseGet(ctx, mlirStringRefCreateFromCString(i32_i64_s_text));
|
|
|
|
// CHECK: !llvm.struct<(i32, i64)>: 1
|
|
|
|
fprintf(stderr, "%s: %d\n", i32_i64_s_text,
|
|
|
|
mlirTypeEqual(i32_i64_s, i32_i64_s_ref));
|
2021-07-03 01:03:46 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
MlirContext ctx = mlirContextCreate();
|
|
|
|
mlirDialectHandleRegisterDialect(mlirGetDialectHandle__llvm__(), ctx);
|
|
|
|
mlirContextGetOrLoadDialect(ctx, mlirStringRefCreateFromCString("llvm"));
|
|
|
|
testTypeCreation(ctx);
|
|
|
|
mlirContextDestroy(ctx);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|