Skip to content

Commit

Permalink
ignore sign operand
Browse files Browse the repository at this point in the history
Addresses #644.
  • Loading branch information
PeiMu committed Mar 7, 2023
1 parent 5bda7d6 commit d446739
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 4 deletions.
46 changes: 46 additions & 0 deletions analysis/statistics/f21c4e3302318d963ae0e17067839698f3dabebf.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@

changeset: 1443:f21c4e3302318d963ae0e17067839698f3dabebf
char kNewtonVersion[] = "0.3-alpha-1443 (f21c4e3302318d963ae0e17067839698f3dabebf) (build 03-06-2023-20:[email protected]_64)";
\n./src/noisy/noisy-linux-EN -O0 applications/noisy/helloWorld.n -s
\n./src/newton/newton-linux-EN -v 0 -eP applications/newton/invariants/ViolinWithTemperatureDependence-pigroups.nt

Informational Report:
---------------------
Invariant "ViolinWithTemperatureDependenceForPiGroups" has 2 unique kernels, each with 2 column(s)...

Kernel 0 is a valid kernel:

1 1
-0.5 -0
1 0
0.5 0
0 -1
-0 -1


The ordering of parameters is: P1 P0 P3 P2 P4 P5

Pi group 0, Pi 0 is: P0^(-0.5) P1^( 1) P2^(0.5) P3^( 1) P4^( 0) P5^(-0)

Pi group 0, Pi 1 is: P0^(-0) P1^( 1) P2^( 0) P3^( 0) P4^(-1) P5^(-1)


Kernel 1 is a valid kernel:

1 0
-0.5 1
1 -2
0.5 -1
-0 -2
0 -2


The ordering of parameters is: P1 P0 P3 P2 P4 P5

Pi group 1, Pi 0 is: P0^(-0.5) P1^( 1) P2^(0.5) P3^( 1) P4^(-0) P5^( 0)

Pi group 1, Pi 1 is: P0^( 1) P1^( 0) P2^(-1) P3^(-2) P4^(-2) P5^(-2)




18 changes: 14 additions & 4 deletions src/newton/newton-irPass-LLVMIR-shrinkTypeByRange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1947,11 +1947,21 @@ upDateInstSignFlag(State * N, Function & llvmIrFunction,
rightOperand = llvmIrICmpInstruction->getOperand(1);
}
if (!isa<llvm::Constant>(leftOperand) && isa<llvm::Constant>(rightOperand)) {
if (ConstantInt * constInt = llvm::dyn_cast<llvm::ConstantInt>(rightOperand)) {
assert(constInt->getSExtValue() >= 0 && "The SCF by range should simplify it!");
} else {
assert(false && "ICmp: it's not a const int!!!!!!!!!!!\n");
/*
* We only check the type has been stored in typeChangedInst, which means might be changed
* and only check if the variable is unsigned.
* */
auto itTC = typeChangedInst.find(leftOperand);
if (itTC == typeChangedInst.end() || itTC->second.signFlag) {
break;
}

ConstantInt * constInt = llvm::dyn_cast<llvm::ConstantInt>(rightOperand);
assert(nullptr != constInt && "ICmp: it's not a const int!!!!!!!!!!!\n");
if (constInt->getSExtValue() < 0) {
break;
}

auto originalPred = llvmIrICmpInstruction->getPredicate();
llvmIrICmpInstruction->setPredicate(ICmpInst::getUnsignedPredicate(originalPred));
}
Expand Down

0 comments on commit d446739

Please sign in to comment.