[PATCH] D156378: [clang][CGExprConstant] handle unary negation on integrals
This revision was automatically updated to reflect the committed changes. Closed by commit rG769333aeeb45: [clang][CGExprConstant] handle unary negation on integrals (authored by nickdesaulniers). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D156378/new/ https://reviews.llvm.org/D156378 Files: clang/lib/CodeGen/CGExprConstant.cpp Index: clang/lib/CodeGen/CGExprConstant.cpp === --- clang/lib/CodeGen/CGExprConstant.cpp +++ clang/lib/CodeGen/CGExprConstant.cpp @@ -1363,6 +1363,13 @@ return Visit(E->getSubExpr(), T); } + llvm::Constant *VisitUnaryMinus(UnaryOperator *U, QualType T) { +if (llvm::Constant *C = Visit(U->getSubExpr(), T)) + if (auto *CI = dyn_cast(C)) +return llvm::ConstantInt::get(CGM.getLLVMContext(), -CI->getValue()); +return nullptr; + } + // Utility methods llvm::Type *ConvertType(QualType T) { return CGM.getTypes().ConvertType(T); Index: clang/lib/CodeGen/CGExprConstant.cpp === --- clang/lib/CodeGen/CGExprConstant.cpp +++ clang/lib/CodeGen/CGExprConstant.cpp @@ -1363,6 +1363,13 @@ return Visit(E->getSubExpr(), T); } + llvm::Constant *VisitUnaryMinus(UnaryOperator *U, QualType T) { +if (llvm::Constant *C = Visit(U->getSubExpr(), T)) + if (auto *CI = dyn_cast(C)) +return llvm::ConstantInt::get(CGM.getLLVMContext(), -CI->getValue()); +return nullptr; + } + // Utility methods llvm::Type *ConvertType(QualType T) { return CGM.getTypes().ConvertType(T); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D156378: [clang][CGExprConstant] handle unary negation on integrals
efriedma accepted this revision. efriedma added a comment. This revision is now accepted and ready to land. LGTM Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D156378/new/ https://reviews.llvm.org/D156378 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D156378: [clang][CGExprConstant] handle unary negation on integrals
nickdesaulniers updated this revision to Diff 546634. nickdesaulniers marked an inline comment as done. nickdesaulniers added a comment. - prefer VisitUnaryMinus as per @efriedma Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D156378/new/ https://reviews.llvm.org/D156378 Files: clang/lib/CodeGen/CGExprConstant.cpp Index: clang/lib/CodeGen/CGExprConstant.cpp === --- clang/lib/CodeGen/CGExprConstant.cpp +++ clang/lib/CodeGen/CGExprConstant.cpp @@ -1363,6 +1363,13 @@ return Visit(E->getSubExpr(), T); } + llvm::Constant *VisitUnaryMinus(UnaryOperator *U, QualType T) { +if (llvm::Constant *C = Visit(U->getSubExpr(), T)) + if (auto *CI = dyn_cast(C)) +return llvm::ConstantInt::get(CGM.getLLVMContext(), -CI->getValue()); +return nullptr; + } + // Utility methods llvm::Type *ConvertType(QualType T) { return CGM.getTypes().ConvertType(T); Index: clang/lib/CodeGen/CGExprConstant.cpp === --- clang/lib/CodeGen/CGExprConstant.cpp +++ clang/lib/CodeGen/CGExprConstant.cpp @@ -1363,6 +1363,13 @@ return Visit(E->getSubExpr(), T); } + llvm::Constant *VisitUnaryMinus(UnaryOperator *U, QualType T) { +if (llvm::Constant *C = Visit(U->getSubExpr(), T)) + if (auto *CI = dyn_cast(C)) +return llvm::ConstantInt::get(CGM.getLLVMContext(), -CI->getValue()); +return nullptr; + } + // Utility methods llvm::Type *ConvertType(QualType T) { return CGM.getTypes().ConvertType(T); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D156378: [clang][CGExprConstant] handle unary negation on integrals
efriedma added inline comments. Comment at: clang/lib/CodeGen/CGExprConstant.cpp:1366 + llvm::Constant *VisitUnaryOperator(UnaryOperator *U, QualType T) { +switch (U->getOpcode()) { StmtVisitor supports defining a function "VisitUnaryMinus", so you don't have to switch() over the opcode. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D156378/new/ https://reviews.llvm.org/D156378 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D156378: [clang][CGExprConstant] handle unary negation on integrals
nickdesaulniers updated this revision to Diff 544538. nickdesaulniers added a comment. - fix oneline class Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D156378/new/ https://reviews.llvm.org/D156378 Files: clang/lib/CodeGen/CGExprConstant.cpp Index: clang/lib/CodeGen/CGExprConstant.cpp === --- clang/lib/CodeGen/CGExprConstant.cpp +++ clang/lib/CodeGen/CGExprConstant.cpp @@ -1363,6 +1363,19 @@ return Visit(E->getSubExpr(), T); } + llvm::Constant *VisitUnaryOperator(UnaryOperator *U, QualType T) { +switch (U->getOpcode()) { +default: + break; +case UO_Minus: + if (llvm::Constant *C = Visit(U->getSubExpr(), T)) +if (auto *CI = dyn_cast(C)) + return llvm::ConstantInt::get(CGM.getLLVMContext(), -CI->getValue()); + break; +} +return nullptr; + } + // Utility methods llvm::Type *ConvertType(QualType T) { return CGM.getTypes().ConvertType(T); Index: clang/lib/CodeGen/CGExprConstant.cpp === --- clang/lib/CodeGen/CGExprConstant.cpp +++ clang/lib/CodeGen/CGExprConstant.cpp @@ -1363,6 +1363,19 @@ return Visit(E->getSubExpr(), T); } + llvm::Constant *VisitUnaryOperator(UnaryOperator *U, QualType T) { +switch (U->getOpcode()) { +default: + break; +case UO_Minus: + if (llvm::Constant *C = Visit(U->getSubExpr(), T)) +if (auto *CI = dyn_cast(C)) + return llvm::ConstantInt::get(CGM.getLLVMContext(), -CI->getValue()); + break; +} +return nullptr; + } + // Utility methods llvm::Type *ConvertType(QualType T) { return CGM.getTypes().ConvertType(T); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D156378: [clang][CGExprConstant] handle unary negation on integrals
nickdesaulniers created this revision. Herald added a project: All. nickdesaulniers requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits. Consider the statement: int x = -1; And the following AST: `-VarDecl 0x55c4823a7670 col:5 x 'int' cinit `-UnaryOperator 0x55c4823a7740 'int' prefix '-' `-IntegerLiteral 0x55c4823a7720 'int' 1 Return the evaluation of the subexpression negated. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D156378 Files: clang/lib/CodeGen/CGExprConstant.cpp Index: clang/lib/CodeGen/CGExprConstant.cpp === --- clang/lib/CodeGen/CGExprConstant.cpp +++ clang/lib/CodeGen/CGExprConstant.cpp @@ -1363,6 +1363,19 @@ return Visit(E->getSubExpr(), T); } + llvm::Constant *VisitUnaryOperator(UnaryOperator *U, QualType T) { +switch (U->getOpcode()) { +default: + break; +case UO_Minus: + if (llvm::Constant *C = Visit(U->getSubExpr(), T)) +if (auto *CI = dyn_cast(C)) + return llvm::ConstantInt::get(CGM.getLLVMContext(), -CI->getValue()); + break; +} +return nullptr; + } + // Utility methods llvm::Type *ConvertType(QualType T) { return CGM.getTypes().ConvertType(T); Index: clang/lib/CodeGen/CGExprConstant.cpp === --- clang/lib/CodeGen/CGExprConstant.cpp +++ clang/lib/CodeGen/CGExprConstant.cpp @@ -1363,6 +1363,19 @@ return Visit(E->getSubExpr(), T); } + llvm::Constant *VisitUnaryOperator(UnaryOperator *U, QualType T) { +switch (U->getOpcode()) { +default: + break; +case UO_Minus: + if (llvm::Constant *C = Visit(U->getSubExpr(), T)) +if (auto *CI = dyn_cast(C)) + return llvm::ConstantInt::get(CGM.getLLVMContext(), -CI->getValue()); + break; +} +return nullptr; + } + // Utility methods llvm::Type *ConvertType(QualType T) { return CGM.getTypes().ConvertType(T); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits