- Dec 19, 2022
-
-
LLVM GN Syncbot authored
-
Doru Bercea authored
-
Matt Arsenault authored
Clang emits this peculiar pattern as an isfinite check in __builtin_isnormal which can be simplified. We should fix clang to emit this in the first place, but should also fold it here.
-
luxufan authored
-
Doru Bercea authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Balazs Benics authored
It seems like `LHS` and `RHS` could be empty range sets. This caused an assertion failure inside RangeConstraintManager. I'm hoisting out the check from the function into the call-site. This way we could assert that we only want to deal with non-empty range sets. The relevant part of the trace: ``` #6 0x00007fe6ff5f81a6 __assert_fail_base (/lib64/libc.so.6+0x2f1a6) #7 0x00007fe6ff5f8252 (/lib64/libc.so.6+0x2f252) #8 0x00000000049caed2 (anonymous namespace)::SymbolicRangeInferrer::VisitBinaryOperator(clang::ento::RangeSet, clang::BinaryOperatorKind, clang::ento::RangeSet, clang::QualType) RangeConstraintManager.cpp:0:0 #9 0x00000000049c9867 (anonymous namespace)::SymbolicRangeInferrer::infer(clang::ento::SymExpr const*) RangeConstraintManager.cpp:0:0 #10 0x00000000049bebf5 (anonymous namespace)::RangeConstraintManager::assumeSymNE(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SymExpr const*, llvm::APSInt const&, llvm::APSInt const&) RangeConstraintManager.cpp:0:0 #11 0x00000000049d368c clang::ento::RangedConstraintManager::assumeSymUnsupported(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SymExpr const*, bool) (../../main-github/llvm/build-all/bin/clang+0x49d368c) #12 0x00000000049f0b09 clang::ento::SimpleConstraintManager::assumeAux(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::NonLoc, bool) (../../main-github/llvm/build-all/bin/clang+0x49f0b09) #13 0x00000000049f096a clang::ento::SimpleConstraintManager::assume(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::NonLoc, bool) (../../main-github/llvm/build-all/bin/clang+0x49f096a) #14 0x00000000049f086d clang::ento::SimpleConstraintManager::assumeInternal(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::DefinedSVal, bool) (../../main-github/llvm/build-all/bin/clang+0x49f086d) #15 0x000000000492d3e3 clang::ento::ConstraintManager::assumeDual(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::DefinedSVal) (../../main-github/llvm/build-all/bin/clang+0x492d3e3) #16 0x0000000004955b6d clang::ento::ExprEngine::evalEagerlyAssumeBinOpBifurcation(clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNodeSet&, clang::Expr const*) (../../main-github/llvm/build-all/bin/clang+0x4955b6d) #17 0x00000000049514b6 clang::ento::ExprEngine::Visit(clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&) (../../main-github/llvm/build-all/bin/clang+0x49514b6) #18 0x000000000494c73e clang::ento::ExprEngine::ProcessStmt(clang::Stmt const*, clang::ento::ExplodedNode*) (../../main-github/llvm/build-all/bin/clang+0x494c73e) #19 0x000000000494c459 clang::ento::ExprEngine::processCFGElement(clang::CFGElement, clang::ento::ExplodedNode*, unsigned int, clang::ento::NodeBuilderContext*) (../../main-github/llvm/build-all/bin/clang+0x494c459) #20 0x000000000492f3d0 clang::ento::CoreEngine::HandlePostStmt(clang::CFGBlock const*, unsigned int, clang::ento::ExplodedNode*) (../../main-github/llvm/build-all/bin/clang+0x492f3d0) #21 0x000000000492e1f6 clang::ento::CoreEngine::ExecuteWorkList(clang::LocationContext const*, unsigned int, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>) (../../main-github/llvm/build-all/bin/clang+0x492e1f6) ``` Differential Revision: https://reviews.llvm.org/D112621
-
Florian Hahn authored
This patch updates propgatesPoison to take a Use as argument and propagatesPoison now returns true if the passed in operand causes the user to yield poison if the operand is poison This allows propagating poison if the condition of a select is poison. This helps improve results for programUndefinedIfUndefOrPoison. Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D111643
-
Nikita Popov authored
-
Nikita Popov authored
-
Nikita Popov authored
-
Ivan Kosarev authored
Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D138215
-
Nikita Popov authored
-
Adrian Kuegel authored
-
Simon Pilgrim authored
Based off llvm-exegesis captures, confirmed with uops.info
-
Simon Pilgrim authored
This will make it easier to override the folded uop count on a class-by-class basis
-
Jean Perier authored
Using llvm::Optional::value() was just deprecated in LLVM. Remove the usage that was added by D140220 and replace it by an assert. https://lab.llvm.org/buildbot/#/builders/160/builds/14222
-
Luke Lau authored
The tablegen patterns on vector_extract only match i32 constants, but on wasm64 these come in as i64 constants. In certain situations this would cause crashes whenever it couldn't select an extract_vector_elt instruction. Rather than add duplicate patterns for every instruction, this just canonicalizes the constant to be i32 when lowering. Fixes https://github.com/llvm/llvm-project/issues/57577 Differential Revision: https://reviews.llvm.org/D140205
-
Nikita Popov authored
-
Tobias Gysi authored
The revision renames the Importer to ModuleImport and moves the class out of the ConvertFromLLVMIR.cpp file into ModuleImport.h and ModuleImport.cpp. Additionally, it introduces two helper methods on the ModuleImport class that convert functions and globals, and it merges the translateLLVMIRToModule function into the registerFromLLVMIRTranslation function to match the design of the MLIR to LLVM IR export. This restructuring is a step towards the file structure of the export and a preparation for an extensible import https://discourse.llvm.org/t/rfc-extensible-llvm-ir-import/67256/6 that uses a dialect interface to import intrinsics and metadata. Reviewed By: ftynse Differential Revision: https://reviews.llvm.org/D140285
-
Jean Perier authored
Enable lowering of statement function references in HLFIR. This follows the same principle as statement function lowering with the current lowering: - Actual arguments are lowered and mapped to the statement function dummy symbols. - "HostAssociated" symbols are mapped to their host values (these are the symbols referred to inside the statement function expressions that are not statement function dummies. e.g: `x` in `stmt_func(i) = x(i)`). - The statement function expression is evaluated. evaluate::SetLength has to be lowered to deal with statement functions returning characters since the front-end is generating one to ensure the statement function expression value is trimmed/padded to match the statement function declared type. Differential Revision: https://reviews.llvm.org/D140220
-
Pavel Labath authored
Avoid buffer overflows with large indexes, and spurious nul characters with small ones.
-
Adrian Kuegel authored
-
Matthias Springer authored
These patterns devectorize scalar transfers such as vector<f32> or vector<1xf32>. Differential Revision: https://reviews.llvm.org/D140215
-
Matthias Springer authored
This function used to create new ops even if the vectorization failed. Those ops were then folded away. This caused a failure of the GreedyPatternRewriter, which no longer terminated (each time the IR is modified => one more iteration). Differential Revision: https://reviews.llvm.org/D140286
-
Adrian Kuegel authored
-