Skip to content

Commit

Permalink
skip matching the destination type of GEP when its operand is a aggre…
Browse files Browse the repository at this point in the history
…gate type

Addresses #647.
  • Loading branch information
PeiMu committed Mar 19, 2023
1 parent 489862c commit f1999eb
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 1 deletion.
46 changes: 46 additions & 0 deletions analysis/statistics/4e753a104493ddf87c1e65fd165a3e3ed8ae721a.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@

changeset: 1461:4e753a104493ddf87c1e65fd165a3e3ed8ae721a
char kNewtonVersion[] = "0.3-alpha-1461 (4e753a104493ddf87c1e65fd165a3e3ed8ae721a) (build 03-19-2023-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: 13 additions & 1 deletion src/newton/newton-irPass-LLVMIR-shrinkTypeByRange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,11 @@ getRawType(Type * inputType, std::vector<Value *> indexValue = std::vector<Value
/*
* need further check: this might should be removed.
* */
eleType = stType->getContainedType(0);
if (0 != stType->getNumContainedTypes()) {
eleType = stType->getContainedType(0);
} else {
return stType;
}
}
else
{
Expand Down Expand Up @@ -916,6 +920,12 @@ matchDestType(State * N, Instruction * inInstruction, BasicBlock & llvmIrBasicBl
{
unsigned ptAddressSpace = srcType->getPointerAddressSpace();
srcType = srcType->getPointerElementType();
if (srcType->isAggregateType()) {
/*
* we don't shrink the aggregate type
* */
return;
}
std::vector<Value *> indexValue;
for (size_t idx = 0; idx < inInstruction->getNumOperands() - 1; idx++)
{
Expand Down Expand Up @@ -1303,6 +1313,8 @@ bool matchCastType(State * N, Instruction * inInstruction, BasicBlock & llvmIrBa
* %i = castInst type1 %op1 to type2
* store type %op1, type* %op2
* %.i = phi type [%op1, %bb1], [%op2, %bb2], ...
*
* todo: Either skip the aggregate type or analyze it. Mainly structure.
* */
std::map<Value *, typeInfo>
shrinkInstType(State * N, BoundInfo * boundInfo, Function & llvmIrFunction)
Expand Down

0 comments on commit f1999eb

Please sign in to comment.