From e288f7b56fe108435b99a6ffcc3f64958dca1ff3 Mon Sep 17 00:00:00 2001 From: William Moses Date: Fri, 23 Jun 2023 22:47:49 -0400 Subject: [PATCH] Add ext (#332) --- tools/cgeist/Lib/clang-mlir.cc | 6 ++++-- tools/cgeist/Test/Verification/signcmp.c | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/tools/cgeist/Lib/clang-mlir.cc b/tools/cgeist/Lib/clang-mlir.cc index b3d59905d1a6..753c7dc1d1fa 100644 --- a/tools/cgeist/Lib/clang-mlir.cc +++ b/tools/cgeist/Lib/clang-mlir.cc @@ -2575,7 +2575,7 @@ ValueCategory MLIRScanner::VisitAtomicExpr(clang::AtomicExpr *BO) { ValueCategory MLIRScanner::VisitBinaryOperator(clang::BinaryOperator *BO) { auto loc = getMLIRLocation(BO->getExprLoc()); - auto fixInteger = [&](mlir::Value res) { + auto fixInteger = [&](mlir::Value res, bool forceUnsigned = false) { auto prevTy = res.getType().cast(); auto postTy = getMLIRType(BO->getType()).cast(); bool signedType = true; @@ -2585,6 +2585,8 @@ ValueCategory MLIRScanner::VisitBinaryOperator(clang::BinaryOperator *BO) { if (bit->isSignedInteger()) signedType = true; } + if (forceUnsigned) + signedType = false; if (postTy != prevTy) { if (signedType) { res = builder.create(loc, postTy, res); @@ -2838,7 +2840,7 @@ ValueCategory MLIRScanner::VisitBinaryOperator(clang::BinaryOperator *BO) { } else { res = builder.create(loc, IPred, lhs_v, rhs_v); } - return fixInteger(res); + return fixInteger(res, /*forceUnsigned*/ true); } case clang::BinaryOperator::Opcode::BO_Mul: { if (isa(BO->getType())) { diff --git a/tools/cgeist/Test/Verification/signcmp.c b/tools/cgeist/Test/Verification/signcmp.c index aa51f2368f36..ddd06b64e57d 100644 --- a/tools/cgeist/Test/Verification/signcmp.c +++ b/tools/cgeist/Test/Verification/signcmp.c @@ -19,11 +19,11 @@ unsigned int cmp2() { // CHECK-NEXT: scf.if %[[V0]] { // CHECK-NEXT: call @run() : () -> () // CHECK-NEXT: } -// CHECK-NEXT: %[[V1:.+]] = arith.extsi %[[V0]] : i1 to i32 +// CHECK-NEXT: %[[V1:.+]] = arith.extui %[[V0]] : i1 to i32 // CHECK-NEXT: return %[[V1]] : i32 // CHECK-NEXT: } // CHECK: func @cmp2() -> i32 -// CHECK-NEXT: %c-1_i32 = arith.constant -1 : i32 +// CHECK-NEXT: %c1_i32 = arith.constant 1 : i32 // CHECK-NEXT: call @run() : () -> () -// CHECK-NEXT: return %c-1_i32 : i32 +// CHECK-NEXT: return %c1_i32 : i32 // CHECK-NEXT: }