home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / adaptor.zip / adapt.zip / adaptor / src / movecont.c < prev    next >
Text File  |  1994-01-03  |  21KB  |  929 lines

  1. # include "MoveCont.h"
  2. # include "yyMContr.w"
  3. # include <stdio.h>
  4. # if defined __STDC__ | defined __cplusplus
  5. #  include <stdlib.h>
  6. # else
  7.    extern void exit ();
  8. # endif
  9. # include "Tree.h"
  10. # include "Definiti.h"
  11.  
  12. # ifndef NULL
  13. # define NULL 0L
  14. # endif
  15. # ifndef false
  16. # define false 0
  17. # endif
  18. # ifndef true
  19. # define true 1
  20. # endif
  21.  
  22. # ifdef yyInline
  23. # define yyALLOC(tree, free, max, alloc, nodesize, make, ptr, kind) \
  24.   if ((ptr = (tree) free) >= (tree) max) ptr = alloc (); \
  25.   free += nodesize [kind]; \
  26.   ptr->yyHead.yyMark = 0; \
  27.   ptr->Kind = kind;
  28. # else
  29. # define yyALLOC(tree, free, max, alloc, nodesize, make, ptr, kind) ptr = make (kind);
  30. # endif
  31.  
  32. # define yyWrite(s) (void) fputs (s, yyf)
  33. # define yyWriteNl (void) fputc ('\n', yyf)
  34.  
  35. # line 19 "MoveControl.puma"
  36.  
  37. # include <stdio.h>
  38. # include "Idents.h"
  39. # include "StringMe.h"
  40. # include "Types.h"
  41. # include "Shapes.h"
  42.  
  43.  
  44. static FILE * yyf = stdout;
  45.  
  46. static void yyAbort
  47. # ifdef __cplusplus
  48.  (char * yyFunction)
  49. # else
  50.  (yyFunction) char * yyFunction;
  51. # endif
  52. {
  53.  (void) fprintf (stderr, "Error: module MoveControl, routine %s failed\n", yyFunction);
  54.  exit (1);
  55. }
  56.  
  57. static int DistributedVarObject ARGS((tDefinitions o));
  58. int DistributedVariables ARGS((tTree t));
  59. int ArrayExpressions ARGS((tTree t));
  60. static int CountVarMovements ARGS((tTree var, tTree var1));
  61. int CountMovements ARGS((tTree var, tTree exp));
  62. static bool Aligned ARGS((tTree v1, tTree v2));
  63. static void LastDimension ARGS((tTree v, tTree * yyP2, tTree * yyP1));
  64. static void AlignedVarArea ARGS((tTree v1, tTree v2, bool * yyP5, int * yyP4, int * yyP3));
  65. static void LastDimSpec ARGS((tTree v, tTree * yyP9, tTree * yyP8, int * yyP7, int * yyP6));
  66. static bool AlignedVarAccesses ARGS((tTree var1, tTree var2));
  67.  
  68. static int DistributedVarObject
  69. # if defined __STDC__ | defined __cplusplus
  70. (register tDefinitions o)
  71. # else
  72. (o)
  73.  register tDefinitions o;
  74. # endif
  75. {
  76.   if (o->Kind == kVarObject) {
  77.   if (o->VarObject.decl->Kind == kVAR_DECL) {
  78.   if (o->VarObject.decl->VAR_DECL.VAL->Kind == kARRAY_TYPE) {
  79.   if (o->VarObject.Dist->Kind == kHostDistribution) {
  80. # line 37 "MoveControl.puma"
  81.    return 1;
  82.  
  83.   }
  84.   if (o->VarObject.Dist->Kind == kNodeDistribution) {
  85. # line 42 "MoveControl.puma"
  86.    return 1;
  87.  
  88.   }
  89.   }
  90.   }
  91.   }
  92. # line 47 "MoveControl.puma"
  93.    return 0;
  94.  
  95. }
  96.  
  97. int DistributedVariables
  98. # if defined __STDC__ | defined __cplusplus
  99. (register tTree t)
  100. # else
  101. (t)
  102.  register tTree t;
  103. # endif
  104. {
  105. # line 53 "MoveControl.puma"
  106.  
  107. char string[100];
  108.  
  109.  
  110.   switch (t->Kind) {
  111.   case kVAR_OBJ:
  112. # line 57 "MoveControl.puma"
  113.   {
  114. # line 58 "MoveControl.puma"
  115.  if (t->VAR_OBJ.Object == NoObject)
  116.           { GetString (t->VAR_OBJ.Ident, string);
  117.             printf ("DistributedVariables: Object for %s not found\n", string);
  118.             exit (-1);
  119.           }
  120.  
  121.   }
  122.    return DistributedVarObject (t->VAR_OBJ.Object);
  123.  
  124.   case kUSED_VAR:
  125. # line 68 "MoveControl.puma"
  126.    return DistributedVariables (t->USED_VAR.VARNAME);
  127.  
  128.   case kLOOP_VAR:
  129. # line 72 "MoveControl.puma"
  130.    return 0;
  131.  
  132.   case kINDEXED_VAR:
  133. # line 76 "MoveControl.puma"
  134.    return DistributedVariables (t->INDEXED_VAR.IND_VAR) + DistributedVariables (t->INDEXED_VAR.IND_EXPS);
  135.  
  136.   case kADDR:
  137. # line 80 "MoveControl.puma"
  138.    return DistributedVariables (t->ADDR.E);
  139.  
  140.   case kDUMMY_EXP:
  141. # line 84 "MoveControl.puma"
  142.    return 0;
  143.  
  144.   case kCONST_EXP:
  145. # line 88 "MoveControl.puma"
  146.    return 0;
  147.  
  148.   case kARRAY_EXP:
  149. # line 92 "MoveControl.puma"
  150.    return DistributedVariables (t->ARRAY_EXP.ELEMENTS);
  151.  
  152.   case kSLICE_EXP:
  153. # line 96 "MoveControl.puma"
  154.    return DistributedVariables (t->SLICE_EXP.START) + DistributedVariables (t->SLICE_EXP.STOP) + DistributedVariables (t->SLICE_EXP.INC);
  155.  
  156.   case kOP_EXP:
  157. # line 101 "MoveControl.puma"
  158.    return DistributedVariables (t->OP_EXP.OPND1) + DistributedVariables (t->OP_EXP.OPND2);
  159.  
  160.   case kOP1_EXP:
  161. # line 105 "MoveControl.puma"
  162.    return DistributedVariables (t->OP1_EXP.OPND);
  163.  
  164.   case kVAR_EXP:
  165. # line 109 "MoveControl.puma"
  166.    return DistributedVariables (t->VAR_EXP.V);
  167.  
  168.   case kFUNC_CALL_EXP:
  169. # line 113 "MoveControl.puma"
  170.    return DistributedVariables (t->FUNC_CALL_EXP.FUNC_PARAMS);
  171.  
  172.   case kDO_EXP:
  173. # line 117 "MoveControl.puma"
  174.    return DistributedVariables (t->DO_EXP.RANGE) + DistributedVariables (t->DO_EXP.BODY);
  175.  
  176.   case kBTE_LIST:
  177. # line 121 "MoveControl.puma"
  178.    return DistributedVariables (t->BTE_LIST.Elem) + DistributedVariables (t->BTE_LIST.Next);
  179.  
  180.   case kBTE_EMPTY:
  181. # line 125 "MoveControl.puma"
  182.    return 0;
  183.  
  184.   case kBTP_LIST:
  185. # line 129 "MoveControl.puma"
  186.    return DistributedVariables (t->BTP_LIST.Elem) + DistributedVariables (t->BTP_LIST.Next);
  187.  
  188.   case kBTP_EMPTY:
  189. # line 133 "MoveControl.puma"
  190.    return 0;
  191.  
  192.   case kVAR_PARAM:
  193. # line 137 "MoveControl.puma"
  194.    return DistributedVariables (t->VAR_PARAM.V);
  195.  
  196.   }
  197.  
  198. # line 141 "MoveControl.puma"
  199.   {
  200. # line 142 "MoveControl.puma"
  201.    printf ("Distributed Variables failed\n");
  202. # line 143 "MoveControl.puma"
  203.    FileUnparse (stdout, t);
  204.   }
  205.    return 0;
  206.  
  207. }
  208.  
  209. int ArrayExpressions
  210. # if defined __STDC__ | defined __cplusplus
  211. (register tTree t)
  212. # else
  213. (t)
  214.  register tTree t;
  215. # endif
  216. {
  217. # line 155 "MoveControl.puma"
  218.  
  219. int h;
  220. char string[100];
  221.  
  222.  
  223.   switch (t->Kind) {
  224.   case kVAR_OBJ:
  225. # line 160 "MoveControl.puma"
  226.   {
  227. # line 161 "MoveControl.puma"
  228.  if (t->VAR_OBJ.Object == NoObject)
  229.           { GetString (t->VAR_OBJ.Ident, string);
  230.             printf ("ArrayExpressions: Object for %s not found\n", string);
  231.             exit (-1);
  232.           }
  233.  
  234.   }
  235.    return DistributedVarObject (t->VAR_OBJ.Object);
  236.  
  237.   case kUSED_VAR:
  238. # line 170 "MoveControl.puma"
  239.    return ArrayExpressions (t->USED_VAR.VARNAME);
  240.  
  241.   case kLOOP_VAR:
  242. # line 174 "MoveControl.puma"
  243.    return 0;
  244.  
  245.   case kINDEXED_VAR:
  246. # line 178 "MoveControl.puma"
  247.   {
  248. # line 180 "MoveControl.puma"
  249.  h = TreeListLength (t->INDEXED_VAR.IND_EXPS);
  250.        if (h>0)
  251.           h = ArrayExpressions (t->INDEXED_VAR.IND_EXPS);
  252.          else
  253.           h = 1;
  254.  
  255.   }
  256.    return h;
  257.  
  258.   case kADDR:
  259. # line 189 "MoveControl.puma"
  260.    return ArrayExpressions (t->ADDR.E);
  261.  
  262.   case kDUMMY_EXP:
  263. # line 193 "MoveControl.puma"
  264.    return 0;
  265.  
  266.   case kCONST_EXP:
  267. # line 197 "MoveControl.puma"
  268.    return 0;
  269.  
  270.   case kARRAY_EXP:
  271. # line 201 "MoveControl.puma"
  272.    return 1 + ArrayExpressions (t->ARRAY_EXP.ELEMENTS);
  273.  
  274.   case kSLICE_EXP:
  275. # line 205 "MoveControl.puma"
  276.    return ArrayExpressions (t->SLICE_EXP.START) + ArrayExpressions (t->SLICE_EXP.STOP) + ArrayExpressions (t->SLICE_EXP.INC) + 1;
  277.  
  278.   case kOP_EXP:
  279. # line 210 "MoveControl.puma"
  280.    return ArrayExpressions (t->OP_EXP.OPND1) + ArrayExpressions (t->OP_EXP.OPND2);
  281.  
  282.   case kOP1_EXP:
  283. # line 214 "MoveControl.puma"
  284.    return ArrayExpressions (t->OP1_EXP.OPND);
  285.  
  286.   case kVAR_EXP:
  287. # line 218 "MoveControl.puma"
  288.    return ArrayExpressions (t->VAR_EXP.V);
  289.  
  290.   case kFUNC_CALL_EXP:
  291. # line 222 "MoveControl.puma"
  292.    return ArrayExpressions (t->FUNC_CALL_EXP.FUNC_PARAMS);
  293.  
  294.   case kDO_EXP:
  295. # line 226 "MoveControl.puma"
  296.    return ArrayExpressions (t->DO_EXP.RANGE) + ArrayExpressions (t->DO_EXP.BODY);
  297.  
  298.   case kBTE_LIST:
  299. # line 230 "MoveControl.puma"
  300.    return ArrayExpressions (t->BTE_LIST.Elem) + ArrayExpressions (t->BTE_LIST.Next);
  301.  
  302.   case kBTE_EMPTY:
  303. # line 234 "MoveControl.puma"
  304.    return 0;
  305.  
  306.   case kBTP_LIST:
  307. # line 238 "MoveControl.puma"
  308.    return ArrayExpressions (t->BTP_LIST.Elem) + ArrayExpressions (t->BTP_LIST.Next);
  309.  
  310.   case kBTP_EMPTY:
  311. # line 242 "MoveControl.puma"
  312.    return 0;
  313.  
  314.   case kVAR_PARAM:
  315. # line 246 "MoveControl.puma"
  316.    return ArrayExpressions (t->VAR_PARAM.V);
  317.  
  318.   }
  319.  
  320. # line 250 "MoveControl.puma"
  321.   {
  322. # line 251 "MoveControl.puma"
  323.    printf ("Array Expressions failed\n");
  324. # line 252 "MoveControl.puma"
  325.    FileUnparse (stdout, t);
  326.   }
  327.    return 0;
  328.  
  329. }
  330.  
  331. static int CountVarMovements
  332. # if defined __STDC__ | defined __cplusplus
  333. (register tTree var, register tTree var1)
  334. # else
  335. (var, var1)
  336.  register tTree var;
  337.  register tTree var1;
  338. # endif
  339. {
  340. # line 265 "MoveControl.puma"
  341.  
  342. int vdist, vdist1;
  343. int count;
  344.  
  345.   if (var1->Kind == kINDEXED_VAR) {
  346. # line 270 "MoveControl.puma"
  347.   {
  348. # line 272 "MoveControl.puma"
  349.    if (! ((TreeDistribution (var1->INDEXED_VAR.IND_VAR) == 0))) goto yyL1;
  350.   {
  351. # line 273 "MoveControl.puma"
  352.  count = CountMovements (var, var1->INDEXED_VAR.IND_EXPS);
  353.   }
  354.   }
  355.    return count;
  356. yyL1:;
  357.  
  358.   }
  359. # line 277 "MoveControl.puma"
  360.   {
  361. # line 278 "MoveControl.puma"
  362.  vdist = TreeDistribution (var);
  363.        vdist1 = TreeDistribution (var1);
  364.        if (vdist1 == 0)
  365.           {
  366.             count = 0;
  367.           }
  368.        else if (vdist1 == -1)
  369.           {
  370.             if (vdist == -1)
  371.                count = 0;
  372.              else
  373.                count = 1;
  374.           }
  375.        else if (vdist1 == 1)
  376.           {
  377.             if (vdist == 1)
  378.                {
  379.                  if (AlignedVarAccesses (var,var1))
  380.                    count = 0;
  381.                   else
  382.                    count = 1;
  383.                }
  384.              else
  385.                  count = 1;
  386.           }
  387.        else {
  388.               printf ("Mixed variable expression cannot be handled\n");
  389.               FileUnparse (stdout, var1); printf ("\n");
  390.               exit (-1);
  391.             }
  392.  
  393.   }
  394.    return count;
  395.  
  396. }
  397.  
  398. int CountMovements
  399. # if defined __STDC__ | defined __cplusplus
  400. (register tTree var, register tTree exp)
  401. # else
  402. (var, exp)
  403.  register tTree var;
  404.  register tTree exp;
  405. # endif
  406. {
  407. # line 320 "MoveControl.puma"
  408.  
  409. int vdist, edist;
  410. int count;
  411.  
  412.  
  413.   switch (exp->Kind) {
  414.   case kADDR:
  415. # line 325 "MoveControl.puma"
  416.    return CountMovements (var, exp->ADDR.E);
  417.  
  418.   case kDUMMY_EXP:
  419. # line 329 "MoveControl.puma"
  420.    return 0;
  421.  
  422.   case kCONST_EXP:
  423. # line 333 "MoveControl.puma"
  424.    return 0;
  425.  
  426.   case kARRAY_EXP:
  427. # line 337 "MoveControl.puma"
  428.    return CountMovements (var, exp->ARRAY_EXP.ELEMENTS);
  429.  
  430.   case kSLICE_EXP:
  431. # line 341 "MoveControl.puma"
  432.    return CountMovements (var, exp->SLICE_EXP.START) + CountMovements (var, exp->SLICE_EXP.STOP) + CountMovements (var, exp->SLICE_EXP.INC);
  433.  
  434.   case kOP_EXP:
  435. # line 346 "MoveControl.puma"
  436.    return CountMovements (var, exp->OP_EXP.OPND1) + CountMovements (var, exp->OP_EXP.OPND2);
  437.  
  438.   case kOP1_EXP:
  439. # line 350 "MoveControl.puma"
  440.    return CountMovements (var, exp->OP1_EXP.OPND);
  441.  
  442.   case kVAR_EXP:
  443. # line 354 "MoveControl.puma"
  444.    return CountVarMovements (var, exp->VAR_EXP.V);
  445.  
  446.   case kFUNC_CALL_EXP:
  447. # line 358 "MoveControl.puma"
  448.   {
  449. # line 359 "MoveControl.puma"
  450.  if (IsIntrFunc (exp))
  451.          {
  452.            if (IntrFuncKind1 (exp->FUNC_CALL_EXP.FUNC_ID->PROC_OBJ.Ident))
  453.              { count = CountMovements (var, exp->FUNC_CALL_EXP.FUNC_PARAMS); }
  454.            else if (IntrFuncKind2 (exp->FUNC_CALL_EXP.FUNC_ID->PROC_OBJ.Ident))
  455.              { count = CountMovements (var, exp->FUNC_CALL_EXP.FUNC_PARAMS); }
  456.            else if (IntrFuncKindn (exp->FUNC_CALL_EXP.FUNC_ID->PROC_OBJ.Ident))
  457.              { count = CountMovements (var, exp->FUNC_CALL_EXP.FUNC_PARAMS); }
  458.            else if (exp->FUNC_CALL_EXP.FUNC_ID->PROC_OBJ.Ident == MakeIdent ("SPREAD",6))
  459.              { count = CountMovements (var, exp->FUNC_CALL_EXP.FUNC_PARAMS); }
  460.            else
  461.              {
  462.                count = 1 + CountMovements (var, exp->FUNC_CALL_EXP.FUNC_PARAMS); }
  463.          }
  464.         else
  465.          {
  466.            count = CountMovements (var, exp->FUNC_CALL_EXP.FUNC_PARAMS);
  467.          }
  468.  
  469.   }
  470.    return count;
  471.  
  472.   case kBTE_LIST:
  473. # line 379 "MoveControl.puma"
  474.    return CountMovements (var, exp->BTE_LIST.Elem) + CountMovements (var, exp->BTE_LIST.Next);
  475.  
  476.   case kBTE_EMPTY:
  477. # line 383 "MoveControl.puma"
  478.    return 0;
  479.  
  480.   case kBTP_LIST:
  481. # line 387 "MoveControl.puma"
  482.    return CountMovements (var, exp->BTP_LIST.Elem) + CountMovements (var, exp->BTP_LIST.Next);
  483.  
  484.   case kBTP_EMPTY:
  485. # line 391 "MoveControl.puma"
  486.    return 0;
  487.  
  488.   case kVAR_PARAM:
  489.   if (exp->VAR_PARAM.V->Kind == kADDR) {
  490. # line 395 "MoveControl.puma"
  491.    return CountMovements (var, exp->VAR_PARAM.V);
  492.  
  493.   }
  494. # line 399 "MoveControl.puma"
  495.    return CountVarMovements (var, exp->VAR_PARAM.V);
  496.  
  497.   case kUSED_VAR:
  498. # line 403 "MoveControl.puma"
  499.    return CountVarMovements (var, exp);
  500.  
  501.   case kINDEXED_VAR:
  502. # line 407 "MoveControl.puma"
  503.    return CountVarMovements (var, exp);
  504.  
  505.   }
  506.  
  507. # line 411 "MoveControl.puma"
  508.   {
  509. # line 412 "MoveControl.puma"
  510.    printf ("Counting Movements failed\n");
  511. # line 413 "MoveControl.puma"
  512.    printf ("var : ");
  513. # line 413 "MoveControl.puma"
  514.    FileUnparse (stdout, var);
  515. # line 413 "MoveControl.puma"
  516.    printf ("\n");
  517. # line 414 "MoveControl.puma"
  518.    WriteTree (stdout, var);
  519. # line 415 "MoveControl.puma"
  520.    printf ("exp : ");
  521. # line 415 "MoveControl.puma"
  522.    FileUnparse (stdout, exp);
  523. # line 415 "MoveControl.puma"
  524.    printf ("\n");
  525. # line 416 "MoveControl.puma"
  526.    WriteTree (stdout, exp);
  527. # line 417 "MoveControl.puma"
  528.    exit (- 1);
  529.   }
  530.    return 0;
  531.  
  532. }
  533.  
  534. static bool Aligned
  535. # if defined __STDC__ | defined __cplusplus
  536. (register tTree v1, register tTree v2)
  537. # else
  538. (v1, v2)
  539.  register tTree v1;
  540.  register tTree v2;
  541. # endif
  542. {
  543.   if (v1 == NoTree) return false;
  544.   if (v2 == NoTree) return false;
  545.   if (v1->Kind == kUSED_VAR) {
  546.   if (v2->Kind == kUSED_VAR) {
  547. # line 442 "MoveControl.puma"
  548.   {
  549. # line 444 "MoveControl.puma"
  550.    if (! (v1->USED_VAR.VARNAME->VAR_OBJ.Ident == v2->USED_VAR.VARNAME->VAR_OBJ.Ident)) goto yyL1;
  551.   }
  552.    return true;
  553. yyL1:;
  554.  
  555. # line 447 "MoveControl.puma"
  556.  {
  557.   tTree yyV1;
  558.   tTree yyV2;
  559.   tTree yyV3;
  560.   tTree yyV4;
  561.   {
  562. # line 450 "MoveControl.puma"
  563.    LastDimension (v1, & yyV1, & yyV2);
  564. # line 456 "MoveControl.puma"
  565.    LastDimension (v2, & yyV3, & yyV4);
  566. # line 462 "MoveControl.puma"
  567.    if (! (EqualExpression (yyV1, yyV3) == true)) goto yyL2;
  568.   {
  569. # line 463 "MoveControl.puma"
  570.    if (! (EqualExpression (yyV2, yyV4) == true)) goto yyL2;
  571.   }
  572.   }
  573.    return true;
  574.  }
  575. yyL2:;
  576.  
  577.   }
  578.   }
  579.   return false;
  580. }
  581.  
  582. static void LastDimension
  583. # if defined __STDC__ | defined __cplusplus
  584. (register tTree v, register tTree * yyP2, register tTree * yyP1)
  585. # else
  586. (v, yyP2, yyP1)
  587.  register tTree v;
  588.  register tTree * yyP2;
  589.  register tTree * yyP1;
  590. # endif
  591. {
  592.   if (v == NoTree) return;
  593.   if (v->Kind == kUSED_VAR) {
  594. # line 468 "MoveControl.puma"
  595.  {
  596.   struct_shape s;
  597.   tTree low;
  598.   tTree up;
  599.   {
  600. # line 470 "MoveControl.puma"
  601.  
  602. # line 472 "MoveControl.puma"
  603.  
  604. # line 473 "MoveControl.puma"
  605.  
  606. # line 475 "MoveControl.puma"
  607.  GetCurrentShape (v, &s);
  608.      low = s.bounds[s.rank-1][0];
  609.      up  = s.bounds[s.rank-1][1];
  610.  
  611.   }
  612.    * yyP2 = low;
  613.    * yyP1 = up;
  614.    return;
  615.  }
  616.  
  617.   }
  618. ;
  619. }
  620.  
  621. static void AlignedVarArea
  622. # if defined __STDC__ | defined __cplusplus
  623. (register tTree v1, register tTree v2, register bool * yyP5, register int * yyP4, register int * yyP3)
  624. # else
  625. (v1, v2, yyP5, yyP4, yyP3)
  626.  register tTree v1;
  627.  register tTree v2;
  628.  register bool * yyP5;
  629.  register int * yyP4;
  630.  register int * yyP3;
  631. # endif
  632. {
  633.   if (v1 == NoTree) return;
  634.   if (v2 == NoTree) return;
  635.   if (v1->Kind == kUSED_VAR) {
  636.   if (v2->Kind == kUSED_VAR) {
  637. # line 493 "MoveControl.puma"
  638.  {
  639.   tTree yyV1;
  640.   tTree yyV2;
  641.   int yyV3;
  642.   int yyV4;
  643.   {
  644. # line 495 "MoveControl.puma"
  645.    if (! (v1->USED_VAR.VARNAME->VAR_OBJ.Ident == v2->USED_VAR.VARNAME->VAR_OBJ.Ident)) goto yyL1;
  646.   {
  647. # line 496 "MoveControl.puma"
  648.    LastDimSpec (v1, & yyV1, & yyV2, & yyV3, & yyV4);
  649.   }
  650.   }
  651.    * yyP5 = true;
  652.    * yyP4 = - yyV3;
  653.    * yyP3 = yyV4;
  654.    return;
  655.  }
  656. yyL1:;
  657.  
  658. # line 500 "MoveControl.puma"
  659.  {
  660.   tTree yyV1;
  661.   tTree yyV2;
  662.   int yyV3;
  663.   int yyV4;
  664.   tTree yyV5;
  665.   tTree yyV6;
  666.   int yyV7;
  667.   int yyV8;
  668.   {
  669. # line 503 "MoveControl.puma"
  670.    LastDimSpec (v1, & yyV1, & yyV2, & yyV3, & yyV4);
  671. # line 504 "MoveControl.puma"
  672.    LastDimSpec (v2, & yyV5, & yyV6, & yyV7, & yyV8);
  673. # line 506 "MoveControl.puma"
  674.    if (! (EqualExpression (yyV1, yyV5) == true)) goto yyL2;
  675.   {
  676. # line 507 "MoveControl.puma"
  677.    if (! (EqualExpression (yyV2, yyV6) == true)) goto yyL2;
  678.   {
  679. # line 511 "MoveControl.puma"
  680.    if (! ((yyV7 >= yyV3))) goto yyL2;
  681.   {
  682. # line 512 "MoveControl.puma"
  683.    if (! ((yyV8 >= yyV4))) goto yyL2;
  684.   }
  685.   }
  686.   }
  687.   }
  688.    * yyP5 = true;
  689.    * yyP4 = yyV3 - yyV7;
  690.    * yyP3 = yyV8 - yyV4;
  691.    return;
  692.  }
  693. yyL2:;
  694.  
  695.   }
  696.   }
  697. # line 515 "MoveControl.puma"
  698.    * yyP5 = false;
  699.    * yyP4 = 0;
  700.    * yyP3 = 0;
  701.    return;
  702.  
  703. ;
  704. }
  705.  
  706. static void LastDimSpec
  707. # if defined __STDC__ | defined __cplusplus
  708. (register tTree v, register tTree * yyP9, register tTree * yyP8, register int * yyP7, register int * yyP6)
  709. # else
  710. (v, yyP9, yyP8, yyP7, yyP6)
  711.  register tTree v;
  712.  register tTree * yyP9;
  713.  register tTree * yyP8;
  714.  register int * yyP7;
  715.  register int * yyP6;
  716. # endif
  717. {
  718.   if (v == NoTree) return;
  719.   if (v->Kind == kUSED_VAR) {
  720. # line 538 "MoveControl.puma"
  721.  {
  722.   tTree yyV1;
  723.   tTree yyV2;
  724.   int yyV3;
  725.   int yyV4;
  726.   {
  727. # line 540 "MoveControl.puma"
  728.    LastDimSpec (ArrayFormals (v->USED_VAR.VARNAME->VAR_OBJ.Object), & yyV1, & yyV2, & yyV3, & yyV4);
  729.   }
  730.    * yyP9 = yyV1;
  731.    * yyP8 = yyV2;
  732.    * yyP7 = yyV3;
  733.    * yyP6 = yyV4;
  734.    return;
  735.  }
  736.  
  737.   }
  738.   if (v->Kind == kTYPE_LIST) {
  739.   if (v->TYPE_LIST.Elem->Kind == kDYNAMIC) {
  740.   if (v->TYPE_LIST.Elem->DYNAMIC.Shape->Kind == kSLICE_EXP) {
  741.   if (v->TYPE_LIST.Next->Kind == kTYPE_EMPTY) {
  742. # line 543 "MoveControl.puma"
  743.    * yyP9 = v->TYPE_LIST.Elem->DYNAMIC.Shape->SLICE_EXP.START;
  744.    * yyP8 = v->TYPE_LIST.Elem->DYNAMIC.Shape->SLICE_EXP.STOP;
  745.    * yyP7 = v->TYPE_LIST.Elem->DYNAMIC.left_overlap;
  746.    * yyP6 = v->TYPE_LIST.Elem->DYNAMIC.right_overlap;
  747.    return;
  748.  
  749.   }
  750.   }
  751.   }
  752.   if (v->TYPE_LIST.Elem->Kind == kINDEX_TYPE) {
  753.   if (v->TYPE_LIST.Next->Kind == kTYPE_EMPTY) {
  754. # line 547 "MoveControl.puma"
  755.    * yyP9 = v->TYPE_LIST.Elem->INDEX_TYPE.LOWER;
  756.    * yyP8 = v->TYPE_LIST.Elem->INDEX_TYPE.UPPER;
  757.    * yyP7 = v->TYPE_LIST.Elem->INDEX_TYPE.left_overlap;
  758.    * yyP6 = v->TYPE_LIST.Elem->INDEX_TYPE.right_overlap;
  759.    return;
  760.  
  761.   }
  762.   }
  763.   if (v->TYPE_LIST.Next->Kind == kTYPE_EMPTY) {
  764. # line 551 "MoveControl.puma"
  765.   {
  766. # line 552 "MoveControl.puma"
  767.    printf ("Illegal last index in LastDimSpec\n");
  768. # line 553 "MoveControl.puma"
  769.    WriteTree (stdout, v);
  770. # line 554 "MoveControl.puma"
  771.    kill_in_protocol ();
  772.   }
  773.    * yyP9 = NoTree;
  774.    * yyP8 = NoTree;
  775.    * yyP7 = 0;
  776.    * yyP6 = 0;
  777.    return;
  778.  
  779.   }
  780. # line 557 "MoveControl.puma"
  781.  {
  782.   tTree yyV1;
  783.   tTree yyV2;
  784.   int yyV3;
  785.   int yyV4;
  786.   {
  787. # line 559 "MoveControl.puma"
  788.    LastDimSpec (v->TYPE_LIST.Next, & yyV1, & yyV2, & yyV3, & yyV4);
  789.   }
  790.    * yyP9 = yyV1;
  791.    * yyP8 = yyV2;
  792.    * yyP7 = yyV3;
  793.    * yyP6 = yyV4;
  794.    return;
  795.  }
  796.  
  797.   }
  798. # line 562 "MoveControl.puma"
  799.   {
  800. # line 564 "MoveControl.puma"
  801.    printf ("Illegal Tree in LastDimSpec\n");
  802. # line 565 "MoveControl.puma"
  803.    WriteTree (stdout, v);
  804. # line 566 "MoveControl.puma"
  805.    kill_in_protocol ();
  806.   }
  807.    * yyP9 = NoTree;
  808.    * yyP8 = NoTree;
  809.    * yyP7 = 0;
  810.    * yyP6 = 0;
  811.    return;
  812.  
  813. ;
  814. }
  815.  
  816. static bool AlignedVarAccesses
  817. # if defined __STDC__ | defined __cplusplus
  818. (register tTree var1, register tTree var2)
  819. # else
  820. (var1, var2)
  821.  register tTree var1;
  822.  register tTree var2;
  823. # endif
  824. {
  825.   if (var1 == NoTree) return false;
  826.   if (var2 == NoTree) return false;
  827.   if (var1->Kind == kUSED_VAR) {
  828.   if (var2->Kind == kUSED_VAR) {
  829. # line 594 "MoveControl.puma"
  830.  {
  831.   bool yyV1;
  832.   int yyV2;
  833.   int yyV3;
  834.   {
  835. # line 595 "MoveControl.puma"
  836.    AlignedVarArea (var1, var2, & yyV1, & yyV2, & yyV3);
  837. # line 596 "MoveControl.puma"
  838.    if (! ((yyV1 == true))) goto yyL1;
  839.   }
  840.    return true;
  841.  }
  842. yyL1:;
  843.  
  844.   }
  845.   if (var2->Kind == kINDEXED_VAR) {
  846. # line 599 "MoveControl.puma"
  847.  {
  848.   bool yyV1;
  849.   int yyV2;
  850.   int yyV3;
  851.   {
  852. # line 600 "MoveControl.puma"
  853.    AlignedVarArea (var1, var2->INDEXED_VAR.IND_VAR, & yyV1, & yyV2, & yyV3);
  854. # line 601 "MoveControl.puma"
  855.    if (! ((yyV1 == true))) goto yyL2;
  856.   }
  857.    return true;
  858.  }
  859. yyL2:;
  860.  
  861.   }
  862.   }
  863.   if (var1->Kind == kINDEXED_VAR) {
  864.   if (var2->Kind == kUSED_VAR) {
  865. # line 604 "MoveControl.puma"
  866.  {
  867.   bool yyV1;
  868.   int yyV2;
  869.   int yyV3;
  870.   {
  871. # line 605 "MoveControl.puma"
  872.    AlignedVarArea (var1->INDEXED_VAR.IND_VAR, var2, & yyV1, & yyV2, & yyV3);
  873. # line 606 "MoveControl.puma"
  874.    if (! ((yyV1 == true))) goto yyL3;
  875.   }
  876.    return true;
  877.  }
  878. yyL3:;
  879.  
  880.   }
  881.   if (var2->Kind == kINDEXED_VAR) {
  882. # line 609 "MoveControl.puma"
  883.  {
  884.   bool yyV1;
  885.   int yyV2;
  886.   int yyV3;
  887.   bool found1;
  888.   int val;
  889.   {
  890. # line 613 "MoveControl.puma"
  891.    AlignedVarArea (var1->INDEXED_VAR.IND_VAR, var2->INDEXED_VAR.IND_VAR, & yyV1, & yyV2, & yyV3);
  892. # line 615 "MoveControl.puma"
  893.    if (! ((yyV1 == true))) goto yyL4;
  894.   {
  895. # line 617 "MoveControl.puma"
  896.  
  897. # line 618 "MoveControl.puma"
  898.  
  899. # line 620 "MoveControl.puma"
  900.    GetConstDifference (LastIndex (var2->INDEXED_VAR.IND_EXPS), LastIndex (var1->INDEXED_VAR.IND_EXPS), & found1, & val);
  901. # line 627 "MoveControl.puma"
  902.    if (! ((found1 == true))) goto yyL4;
  903.   {
  904. # line 628 "MoveControl.puma"
  905.    if (! ((val >= yyV2))) goto yyL4;
  906.   {
  907. # line 629 "MoveControl.puma"
  908.    if (! ((val <= yyV3))) goto yyL4;
  909.   }
  910.   }
  911.   }
  912.   }
  913.    return true;
  914.  }
  915. yyL4:;
  916.  
  917.   }
  918.   }
  919.   return false;
  920. }
  921.  
  922. void BeginMoveControl ()
  923. {
  924. }
  925.  
  926. void CloseMoveControl ()
  927. {
  928. }
  929.