Skip to content

Commit

Permalink
use different cast other than bitcast for fp->int and int->fp
Browse files Browse the repository at this point in the history
Addresses #628.
  • Loading branch information
PeiMu committed Nov 7, 2022
1 parent 37fb639 commit 458b34a
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 2 deletions.
46 changes: 46 additions & 0 deletions analysis/statistics/115c8d9436c7845dc5d0c16cda53e13e79b22622.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@

changeset: 1355:115c8d9436c7845dc5d0c16cda53e13e79b22622
char kNewtonVersion[] = "0.3-alpha-1355 (115c8d9436c7845dc5d0c16cda53e13e79b22622) (build 11-07-2022-16:[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)




14 changes: 12 additions & 2 deletions src/newton/newton-irPass-LLVMIR-shrinkTypeByRange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1553,7 +1553,17 @@ mergeCast(State * N, Function & llvmIrFunction,
* */
Value * castInst;
auto valueType = llvmIrInstruction->getType();
if (valueType->isIntegerTy())
if (valueType->isFloatTy() && sourceOperand->getType()->isIntegerTy()) {
// float fa = (float)ia;
bool isSinged = sourceInst->getOpcode() == Instruction::SIToFP;
castInst = isSinged ? Builder.CreateSIToFP(sourceOperand, valueType)
: Builder.CreateUIToFP(sourceOperand, valueType);
} else if (valueType->isIntegerTy() && sourceOperand->getType()->isFloatTy()) {
// int iq = (int)fq;
bool isSinged = sourceInst->getOpcode() == Instruction::FPToSI;
castInst = isSinged ? Builder.CreateFPToSI(sourceOperand, valueType)
: Builder.CreateFPToUI(sourceOperand, valueType);
} else if (valueType->isIntegerTy())
{
castInst = Builder.CreateIntCast(sourceOperand, valueType,
llvmIrInstruction->getOpcode() == Instruction::SExt);
Expand Down Expand Up @@ -1859,4 +1869,4 @@ shrinkType(State * N, BoundInfo * boundInfo, Function & llvmIrFunction)

// mergeCast(N, llvmIrFunction, boundInfo->virtualRegisterRange, typeChangedInst);
}
}
}

0 comments on commit 458b34a

Please sign in to comment.