diff options
Diffstat (limited to 'compiler_and_linker/unsorted/IroSubable.c')
-rw-r--r-- | compiler_and_linker/unsorted/IroSubable.c | 160 |
1 files changed, 0 insertions, 160 deletions
diff --git a/compiler_and_linker/unsorted/IroSubable.c b/compiler_and_linker/unsorted/IroSubable.c deleted file mode 100644 index 6b8daf0..0000000 --- a/compiler_and_linker/unsorted/IroSubable.c +++ /dev/null @@ -1,160 +0,0 @@ -#include "compiler/IroSubable.h" -#include "compiler/IroLinearForm.h" -#include "compiler/IroPropagate.h" -#include "compiler/IroUtil.h" -#include "compiler/enode.h" -#include "compiler/objects.h" -#include "compiler/types.h" - -static Boolean IsSubableOp[MAXEXPR]; - -void IRO_InitializeIsSubableOpArray(void) { - int i; - - for (i = 0; i < MAXEXPR; i++) - IsSubableOp[i] = 0; - - IsSubableOp[EPOSTINC] = 0; - IsSubableOp[EPOSTDEC] = 0; - IsSubableOp[EPREINC] = 0; - IsSubableOp[EPREDEC] = 0; - IsSubableOp[EINDIRECT] = 0; - IsSubableOp[EMONMIN] = 1; - IsSubableOp[EBINNOT] = 1; - IsSubableOp[ELOGNOT] = 1; - IsSubableOp[EFORCELOAD] = 0; - IsSubableOp[EMUL] = 1; - IsSubableOp[EMULV] = 1; - IsSubableOp[EDIV] = 1; - IsSubableOp[EMODULO] = 1; - IsSubableOp[EADDV] = 1; - IsSubableOp[ESUBV] = 1; - IsSubableOp[EADD] = 1; - IsSubableOp[ESUB] = 1; - IsSubableOp[ESHL] = 1; - IsSubableOp[ESHR] = 1; - IsSubableOp[ELESS] = 0; - IsSubableOp[EGREATER] = 0; - IsSubableOp[ELESSEQU] = 0; - IsSubableOp[EGREATEREQU] = 0; - IsSubableOp[EEQU] = 0; - IsSubableOp[ENOTEQU] = 0; - IsSubableOp[EAND] = 1; - IsSubableOp[EXOR] = 1; - IsSubableOp[EOR] = 1; - IsSubableOp[ELAND] = 0; - IsSubableOp[ELOR] = 0; - IsSubableOp[EASS] = 0; - IsSubableOp[EMULASS] = 0; - IsSubableOp[EDIVASS] = 0; - IsSubableOp[EMODASS] = 0; - IsSubableOp[EADDASS] = 0; - IsSubableOp[ESUBASS] = 0; - IsSubableOp[ESHLASS] = 0; - IsSubableOp[ESHRASS] = 0; - IsSubableOp[EANDASS] = 0; - IsSubableOp[EXORASS] = 0; - IsSubableOp[EORASS] = 0; - IsSubableOp[ECOMMA] = 0; - IsSubableOp[EPMODULO] = 0; - IsSubableOp[EROTL] = 0; - IsSubableOp[EROTR] = 0; - IsSubableOp[EBCLR] = 0; - IsSubableOp[EBTST] = 0; - IsSubableOp[EBSET] = 0; - IsSubableOp[ETYPCON] = 0; - IsSubableOp[EBITFIELD] = 0; - IsSubableOp[EINTCONST] = 0; - IsSubableOp[EFLOATCONST] = 0; - IsSubableOp[ESTRINGCONST] = 0; - IsSubableOp[ECOND] = 0; - IsSubableOp[EFUNCCALL] = 0; - IsSubableOp[EFUNCCALLP] = 0; - IsSubableOp[EOBJREF] = 0; - IsSubableOp[EMFPOINTER] = 0; - IsSubableOp[ENULLCHECK] = 0; - IsSubableOp[EPRECOMP] = 0; - IsSubableOp[ETEMP] = 0; - IsSubableOp[EARGOBJ] = 0; - IsSubableOp[ELOCOBJ] = 0; - IsSubableOp[ELABEL] = 0; - IsSubableOp[ESETCONST] = 0; - IsSubableOp[ENEWEXCEPTION] = 0; - IsSubableOp[ENEWEXCEPTIONARRAY] = 0; - IsSubableOp[EOBJLIST] = 0; - IsSubableOp[EMEMBER] = 0; - IsSubableOp[ETEMPLDEP] = 0; - IsSubableOp[EINSTRUCTION] = 0; - IsSubableOp[EDEFINE] = 0; - IsSubableOp[EREUSE] = 0; - IsSubableOp[EASSBLK] = 0; - IsSubableOp[EVECTOR128CONST] = 0; - IsSubableOp[ECONDASS] = 0; -} - -static int IsSubscript(IROLinear *nd) { - return 0; -} - -Boolean IRO_IsSubableExpression(IROLinear *nd) { - Object *varobj; - Boolean result; - - switch (nd->type) { - case IROLinearOp2Arg: - if (nd->nodetype == EADD || nd->nodetype == ESUB) { - if ( - IRO_IsConstant(nd->u.diadic.right) && - (varobj = IRO_IsVariable(nd->u.diadic.left)) && - varobj->datatype == DLOCAL && - varobj->u.var.info && - !varobj->u.var.info->noregister) - return 0; - - } - result = IsSubableOp[nd->nodetype] && !IsSubscript(nd); - return result; - case IROLinearOp1Arg: - if (IsSubableOp[nd->nodetype] && !IsSubscript(nd)) - return 1; - - if (nd->nodetype == EINDIRECT && !(nd->flags & IROLF_Assigned)) { - if (nd->flags & IROLF_Ind) { - nd = nd->u.monadic; - if (nd->type == IROLinearOperand && - nd->u.node->type == EOBJREF && - nd->u.node->data.objref->datatype == DLOCAL && - nd->u.node->data.objref->u.var.info && - !nd->u.node->data.objref->u.var.info->noregister - ) - return 0; - return 1; - } - - if (IRO_IsVariable(nd) && IRO_IsRegable(nd->u.monadic->u.node->data.objref)) - return 0; - return 1; - } else if (nd->nodetype == ETYPCON && IS_TYPE_INT(nd->rtype) && nd->rtype->size >= nd->u.monadic->rtype->size) { - return 1; - } else { - return 0; - } - case IROLinearOperand: - default: - return 0; - } -} - -Boolean IRO_IsVectorTempCandidate(IROLinear *nd) { - return - ( - nd->type == IROLinearOp1Arg || - nd->type == IROLinearOp2Arg || - nd->type == IROLinearOp3Arg || - nd->type == IROLinearOperand || - nd->type == IROLinearFunccall - ) && ( - (nd->flags & IROLF_LoopInvariant) && - !(nd->flags & IROLF_Ind) - ); -} |