@@ -58,9 +58,9 @@ static void testToLLVMIR(MlirContext ctx) {
5858 LLVMContextDispose (llvmCtx );
5959}
6060
61- // CHECK-LABEL: testTypeFromLLVMIRTranslator
62- static void testTypeFromLLVMIRTranslator (MlirContext ctx ) {
63- fprintf (stderr , "testTypeFromLLVMIRTranslator \n" );
61+ // CHECK-LABEL: testTypeToFromLLVMIRTranslator
62+ static void testTypeToFromLLVMIRTranslator (MlirContext ctx ) {
63+ fprintf (stderr , "testTypeToFromLLVMIRTranslator \n" );
6464 LLVMContextRef llvmCtx = LLVMContextCreate ();
6565
6666 LLVMTypeRef llvmTy = LLVMInt32TypeInContext (llvmCtx );
@@ -77,6 +77,37 @@ static void testTypeFromLLVMIRTranslator(MlirContext ctx) {
7777 mlirTypeToLLVMIRTranslatorTranslateType (toLLVMTranslator , mlirTy );
7878 // CHECK: i32
7979 LLVMDumpType (llvmTy2 );
80+ fprintf (stderr , "\n" );
81+
82+ // check "not overloaded" path
83+ MlirType i32 = mlirIntegerTypeGet (ctx , 32 );
84+ MlirType nonOverloadeTys [] = {i32 };
85+ unsigned returnAddressIID = LLVMLookupIntrinsicID ("llvm.returnaddress" , 18 );
86+ LLVMTypeRef returnAddressIntrinsicTy =
87+ mlirTypeToLLVMIRTranslatorUncheckedGetIntrinsicSignature (
88+ toLLVMTranslator , returnAddressIID , nonOverloadeTys , 1 );
89+ // CHECK: ptr (i32)
90+ LLVMDumpType (returnAddressIntrinsicTy );
91+ fprintf (stderr , "\n" );
92+
93+ // check "overloaded" path
94+ MlirType overloadeTys [] = {i32 , i32 };
95+ unsigned sMaxIID = LLVMLookupIntrinsicID ("llvm.smax" , 9 );
96+ LLVMTypeRef llvmSMaxIntrinsicTy =
97+ mlirTypeToLLVMIRTranslatorUncheckedGetIntrinsicSignature (
98+ toLLVMTranslator , sMaxIID , overloadeTys , 2 );
99+ // CHECK: i32 (i32, i32)
100+ LLVMDumpType (llvmSMaxIntrinsicTy );
101+ fprintf (stderr , "\n" );
102+
103+ MlirType mlirSMaxIntrinsicTy = mlirTypeFromLLVMIRTranslatorTranslateType (
104+ fromLLVMTranslator , llvmSMaxIntrinsicTy );
105+ // CHECK: !llvm.func<i32 (i32, i32)>
106+ mlirTypeDump (mlirSMaxIntrinsicTy );
107+
108+ MlirType retType = mlirLLVMFunctionTypeGetReturnType (mlirSMaxIntrinsicTy );
109+ // CHECK: i32
110+ mlirTypeDump (retType );
80111
81112 mlirTypeFromLLVMIRTranslatorDestroy (fromLLVMTranslator );
82113 mlirTypeToLLVMIRTranslatorDestroy (toLLVMTranslator );
@@ -88,7 +119,7 @@ int main(void) {
88119 mlirDialectHandleRegisterDialect (mlirGetDialectHandle__llvm__ (), ctx );
89120 mlirContextGetOrLoadDialect (ctx , mlirStringRefCreateFromCString ("llvm" ));
90121 testToLLVMIR (ctx );
91- testTypeFromLLVMIRTranslator (ctx );
122+ testTypeToFromLLVMIRTranslator (ctx );
92123 mlirContextDestroy (ctx );
93124 return 0 ;
94125}
0 commit comments