. THAT ALL TERMS CONTAINING INDUCTION VARIABLES ARE TO THE LEFT, NEXT ALL 11070 . TERMS CONTAINING THE SAME INDUCTION VARIABLE ARE FACTORED, FINALLY 11080 . THE TERMS CONTAINING INDUCTION VARIABLES ARE PARENTHESIZED 11090 . PART ONE RECOGNITION AND SORTING OF TERMS 11100 LGFIF . NESTED LOGICAL IF DEFINITIONS RGS . REGISTER DEFINITIONS CONTR SORT EQU SUSORT SURTCT EQUF SUBXT,B6,H1 . POLISH POINTER FOR RETRUN GENSUB SUXTR EQUF SUBXT,B6,H2 . RETURN POINT FOR SUBSCRIPTS GENSUB SAB2 EQUF N3SBTA,B6,H2 . SAVE B2 GENSUB SAB3 EQUF N3SBTA,B6,H1 . SAVE B3 GENSUB SAB2L EQUF N3SBTA-1,B6,H2 VALUE OF B2 ONE LEVEL DOWN GENSUB SAB3L EQUF N3SBTA-1,B6,H1 VALUE ONE LEVEL DOWN GENSUB SAB4 EQUF N3SBTB,B6,H2 . SAVE B4 GENSUB SUBNLT EQUF N3SBTC,B6 . LIMITING DEFINITION POINTS GENSUB SFSIXT EQUF N3SBTE,B6,S3 . SAVE GETF FLAG GENSUB SUBSCT EQUF N3SBTD,B6 GENSUB SUIC4T EQUF N3SBTE,B6,S4 DETERMINE IF INDUCTION VARIABLE GENSUB SUIC5T EQUF N3SBTE,B6,S5 . ARE SPLIT ACRSS LOGICAL IF GENSUB SUIC6T EQUF N3SBTE,B6,S6 GENSUB SUICKA EQUF N3SBTE,B6,H2 GENSUB SUIC3T EQUF N3SBTE,B6,T3 GENSUB SAA6 EQUF N3SBTE,B6,S2 GENSUB SUCHZ EQUF N3SBTE,B6,S1 . FLAG FOR CHARACTER SUBSCRIPTS SUIVCT EQUF N3SBTG,B6 . MARKS INDUCTION VARIABLES BY LEVEL TBT EQUF N3SBTF,B6 . USED IN COMPUTING DEFINTION POINTS GENSUB $(1) . LIT . SA* L A0,FL30 LMJ B11,TF31 TP SUBLV GENSUB SLJ XERV GENSUB L B6,SUBLV SUBSCRIPT NESTING LEVEL GENSUB A,M B6,1 INCREASE FUNCTION LEVEL GENSUB S B6,SUBLV GENSUB L,M A15,0,B6 GENSUB TG,M A15,11 GENSUB SLJ XERV GENSUB S R4,SUBSCT GENSUB L,S6 A0,FL30 FLAG FOR BAD THINGS IN SUBSCRIPT S,S5 A0,SUBSCT L,S5 A0,FL30 SSL A0,3 SZ A1 TNE,M A0,6 . TEST FOR CHARACTER SUBSCRIPTS L A1,A0 S A1,SUCHZ . FLAG FOR CHARACTER SUBSCRIPT L A0,(0777777,077777) S A0,SUBNLT INITIALIZE FOR LIMITING DEF POINTS GENSUB SZ SUICKA GENSUB S R4,SUIC4T FLAG TO DETERMINE IF SUBSCRIPT SPLIT GENSUB S R5,SUIC5T . INITIALIZE AS IMPOSSIBLE LOGICAL IF LE SZ SUIC6T . ACCROSS LOGICAL IF GENSUB . SPLIT ACROSS A LOGICAL IF L,H2 B1,LOOPNU SZ,S4 INDVAR,B1 JGD B1,$-1 L B2,(1,0) J=0 L B3,(1,0) I=0 LXM B2,SAB2L GENSUB LXM B3,SAB3L GENSUB L,M A1,077777 S A1,TBT INITIALIZE DEF POINT GENSUB L,M A13,01014 * ID L,M A14,01012 + ID LMJ B11,GET1 L,H1 A1,FL30 SSL A1,6 TNE,M A1,04300 . TEST FOR STATEMENT FUNCTION ARGUMENT LMJ B11,SFDP1 . REPLACE ARGUMENT BY ITS TAKE VALUE L B6,SUBLV L,T1 A1,FL30 TE,M A1,01023 IS FIRST ITEM AN OFFSET PLUS J SU31 -NO, THEN ONLY AN OFFSET SU10 S B3,B4 I PRIME = I L,M A6,1 K=1 SZ SORT+1,B3 SU11 LMJ B11,GET1 L,M A1,044 GENSUB TNE,S1 A1,FL30 GENSUB J SU11J GENSUB TP FL30 LMJ B11,SFDP1 . REPLACE ARGUMENT BY ITS VALUE L B6,SUBLV GENSUB L,S1 A1,FL30 TNE,M A1,8 IS ITEM AN OPERATOR J SU30 -YES TNE,M A1,036 J SU11M TLE,M A1,6 J SU13,A1 BRANCH ON ID SU11J L,M A1,$+3 GENSUB S A1,GESUFL GENSUB J SFND CLEAR OUT DEFINE GENSUB SU11H SZ GESUFL L B6,SUBLV L,M A13,01014 * L,M A14,01012 + J SU11 CONTINUE READING FILE ITEMS FOR SUBSCRIPT GENSUB SU12 XER 10 NON-VALID ITEM IN SUBSCRIPT SU11M L,M A1,SU11H S A1,GESUFL J ITVFL SU13 J SU12 0-ERROR J SU15 1-INDUCTION VARIABLE J SU16 2-VARIABLE J SU14 3-CONSTANT J SU17 4-OFFSET SXLOC A1 A0 LNKSBX JNBL A4,2,A1,S4 010 SU13A S,S6 R6,SUBSCT S,S5 R4,SUBSCT DO NOT ALLOW SAFE SUBSCRIPTS GENSUB SU13A S A0,SORT,*B3 L A0,TBT S A0,TX S R4,SUBSV L A2,2,A1 AND A2,(077777,077777) S A3,TY LMJ B11,CY MVW TX TBT J SU11 SU14 SZ A6 -CONSTANT, K=0 J SU15J SU15 AND,M A0,07777 . EXTRACT PLATEAU NUMBER TZ SUCHZ . TEST FOR CHARACTER SUBSCRIPTS J SU15Q L A2,LOOP+1,A1 . GET SYM REF OF IND VAR L,S3 A2,2,A2 . TEST IF INDUCTION VARIABLE IS OTHER SSL A2,3 . INTEGER TLE,M A2,2 . TEST RWAL AND HIGHER J SU15J SU15Q L,M A2,2 S,S1 A2,FL30 . CHANGE ID TO VARIABLE MVW LOOP+1,A1,H2 FL30,0,H2 . SYM PT SBT A4,LOOP,A1,S4,4 . MARK FOR MATERIALIZATION J SU16 SU15J S A0,SORT,*B3 . INDUCTION VARIABLE AND * AND,M A0,07777 . UNLESS AN INDUCTION VARIABLE OF THE L,S1 A2,SORT-1,B3 TE,M A2,1 J SU11 NOT INDUCTION VARIABLE SR,S3 R4,SUBSCT MARK THAT INDUCTION VARIABLE APPEARED GENSUB L B1,(1,0) L,H2 R1,LOOPNU FIND DO LEVEL CORRESPONDING TO THIS PLATEAU SE,H1 A1,INDVAR+1,*B1 SLJ XERV SBT A2,INDVAR,B1,S4,1 SHOW USE OF INDUCTION VARIABLE L,H1 A2,SUBNLT GENSUB L A3,IVSQ,B1 DEFINITION POINTS OF LOOP AN A3,(1,0) GET SEQUENCE TO TOP OF LOOP TG,H1 A2,IVSQ,B1 S A3,SUBNLT GENSUB SU14A L,H2 A2,IVLGQ,B1 . LOGICAL IF AT LOOP END L A0,SUIC5T . TEST IF FIRST LOGICAL IF TNE,M A0,077 S A2,SUIC5T . SAVE LAST LOST LOGICAL IF LEVEL TE A2,SUIC5T SZ SUIC4T . SHOW IVS AT DIFFERENT LOGICAL IF LEVEL SU14B L A0,FL30 GENSUB AN,M B3,1 GENSUB J SU16Y . INSURE INDUCTION VARIABLE COMES FIRST GENSUB SU16 L,M B8,0,A0 L A0,GETF TE,M A0,4 TEST FOR READING FROM POLISH J SU16J TN,XH2 2,B8 TEST FOR INDUCTION VARIABLE J SU16J NO CURRENTLY AN INDUCTION VARIABLE L B10,2,B8 PLATEAU AN,M B10,0,*B0 REMOVE 400000 BIT SBT A4,LOOP,B10,S4,4 MARK FOR MATERIALIZATION SU16J L,M B9,0 GENSUB LMJ B10,CC4 L,S2 A0,FL30 TE,M A0,077 TEST FOR VARIABLE DIMENSION S,S4 R5,SUBSCT FLAG THAT VARIALBE IN SUBSCRIPT GENSUB L A0,TA S A0,TY L A0,TBT GENSUB S A0,TX LMJ B11,CY L A0,TX S A0,TBT GENSU TNZ CRIFZ TEST FOR INTERNAL FUNCTIONS J SU16Z LA,2 A2,CRGSYM TEST IF VARIABLE IS GLOBAL LA,1 A3,CRGSYM TW,M A2,0,B8 J SU16Z VARIABLE WAS NOT GLOBAL MVW CRCDP TY DETERMINE COMPUTE POINT AS IF GLOBAL LMJ B11,CY VARIABLE WERE IN COMMMON MVW TX TBT ACCUMULATE DEF POINT GENSUB SU16Z L A0,LOOPNU L,M A2,1 TEP A2,INDVAR,A0 IS LOOP UNSAFE S,S6 R6,SUBSCT MATERIALIZE SUBSCRIPT GENSUB L,S4 A3,SUBSCT FLAG FOR VARIABLE IN SUBSCRIPT GENSUB TZ,H2 LOOPNU TEP A2,INDVAR,A0 S,S5 A3,SUBSCT . FORCE EVALUATION OF SUBSCRIPT GENSUB L A0,FL30 L,M A15,3 GENSUB TE,S1 A15,SORT+1,B4 GENSUB J SU15J SU16Y . INDUCTION VARIABLE COMES HERE GENSUB L A1,SORT+1,B4 SORT(I PRIME) IS CONSTANT-- S A0,SORT+1,B4 EXCHANGE WITH CURRENT VARIABLE S A1,SORT,*B3 L,S3 A0,SORT+1,B4 CHECK FOR UNARY MINUS TE,M A0,04 J SU11 L,S3 A1,SORT-1,B3 DO NOT PERMIT UNARY MINUS ON FACTOR TNE,M A1,04 L,M A0,0 S,S3 A0,SORT-1,B3 SZ,S3 SORT+1,B4 J SU11 SU17 S,T3 B4,SORTK,B2 ADDRESS OF TERM L,M A1,0,B3 AN,M A1,0,B4 I-I PRIME S,S4 A1,SORTK,B2 NUMBER OF ITEMS IN TERM L,S3 A2,SORT+1,B4 LNKSBX SSL A2,2 LNKSBX SSC A2,25 ADD IN SIGN A,H2 A2,SORT+1,B4 LNKSBX TE,M A1,3 ARE THERE THREE ITEMS IN TERM L,M A6,1 -NO, K=1 A A2,A6 S,H1 A2,SORTK,*B2 J=J+1 L,S1 A2,SORT+1,B4 . PUT ID IN SORT KEY S,S1 A2,SORTK-1,B2 . ON INDUCTION VARIABLES WILL SORT FIRST TNE,T1 A14,FL30 IS CURRENT ITEM OFFSET OR PLUS J SU10 -PLUS SZ SORTK,B2 -OFFSET L,M B5,1,NSEQN A,M B5,0,B2 NUMBER OF TERMS A,M B5,0,B3 NUMBER OF ITEMS A B5,(-1,F31) L,M A1,0,B2 GET NUMBER OF TERMS AT THIS LEVEL GENSUB AN A1,SAB2L GENSUB S A1,NSTR GENSUB S A0,2,B5 LMJ B11,GET1 TP FL30 TEST FOR DUMMY ARGYMENT LMJ B11,SFDP1 L B6,SUBLV S A0,3,B5 L,S1 A0,3,B5 TNE,M A0,2 J SU17J XERF ERR29 L A0,ARYITM S A0,3,B5 SU17J . L A0,(0102300,0) OFFSET PLUS S A0,1,B5 L,M A0,1,B5 LOCATION OF OFFSET PLUS S A0,OFPLUS L A0,3,B5 SYM REF OF SUBSCRIPTED VARIABLE L,S3 A1,2,A0 AND,M A1,7 TNZ SUCHZ TE,M A2,5 TEST FOR DUMMMY USED AS SUBSCRIPTED VAR J SU18 S A0,SUDMVR SET FLAG TO REWRITE SUBSCRIPT S,S4 R5,1,B5 131K SU18 TZ DX11 GENSUB SLJ XD11S GENSUB L,M A0,SORTK GENSUB A A0,SAB2L START OF KEYS THIS LEVEL GENSUB J SU18K $(2) . SU18K . S A0,SU18J GENSUB LMJ B11,N3SRT1 GENSUB SU18J +SORTK GENSUB + NSTR J SU18L $(1) . SU18L . TZ SUDMVR . TEST IF SUBSCRIPT FOR DUMMY ARGUMENT J SU18Q TNZ,S1 BSTC1+4 . LEAVE SPACE FOR 2 EXTRA ITEMS J SU18Q DL A0,2,B5 . MOVE ADDED ITEMS UP DS A0,4,B5 L A0,1,B5 . MOVE OFFSET OPPERATOR S A0,3,B5 A,M B5,2 SU18Q SLJ SU33R TNZ,S3 SUBSCT IF NO INDUCTION VARIABLES GENSUB S,S5 R4,SUBSCT SUPRESS DEFINE AT D P GENSUB SZ,T2 SUBSCT ONLY BIT GENSUB L A13,(0101400,0) * ITEM L A14,(0101200,0) + ITEM L B3,(1,0) GENSUB LXM B3,SAB2L START OF SORTK FOR THIS LEVEL GENSUB L A6,B2 SZ A9 RESET AS L,T3 A0,SORTK,B3 POINTER TO FIRST TERM GENSUB L,M A1,1 TNE,S1 A1,SORT+1,A0 J SU40 SU20 TNE A6,B3 IS I=J J SU32 -YES SZ A8 -NO, RESET A2 SU21 L,T3 A0,SORTK,B3 L,S4 A3,SORTK,B3 AN,M A3,2 NUMBER OF ITEMS TO MOVE S A3,R1 AU,S4 A0,SORTK,B3 A A1,(-1,SORT-1) BT B5,0,*A1 MOVE TERM MINUS FACTOR TO F31 TZ A8 IS AI SET S A14,0,*B5 -YES, STORE + L,H1 A1,SORTK,B3 L,H1 A2,SORTK+1,*B3 DSA A1,1 L,M A8,1 SET AI TNE A6,B3 J SU21Y TNE,M A1,0,A2 J SU21 SU21Y L A1,SORT+1,A0 S A1,0,*B5 S A13,0,*B5 TZ A9 IS AS SET S A14,0,*B5 -YES, STORE + L,M A9,1 SET AS J SU20 SU30 TNE,T1 A13,FL30 IS ITEM * J SU15J L,M A1,01014 TE,T1 A1,SORT-1,B3 TNE,T1 A1,SORT-2,B3 J $+3 TNE,T1 A14,FL30 IS ITEM + J SU17 -YES S NSEQN,SURTCT POINTER IN POLISH TO FORCE RETURGENSUB L,M A15,SU30R GENSUB S A15,SUXTR SUBSCRIPT RETURN POINT GENSUB . HERE THE TABLE WHICH SHOWS WHICH INDUCTION VARIABLES . HAVE BEEN USED IN THIS SUBSCRIPT IS SAVED SO IT CAN BE . RESTORED WHEN INNER SUBSCRIPT IS PARSED L,H2 A1,LOOPNU . CURRENT NUMBER OF ACTIVE LOOPS L,M A2,1 SZ A3 . ACCUMULATES TOTAL LIST OF ACTIVE IV'S TZ,S4 INDVAR,A1 A A3,A2 LSSL A2,1 JGD A1,$-3 S A3,SUIVCT S B2,SAB2 GENSUB S B3,SAB3 GENSUB S B4,SAB4 GENSUB S A6,SAA6 GENSUB J ITV GENSUB SU30R . A RETURN IS MADE HERE WHEN WHEN THE TRIAD WHOSE OPERATOR GENSUB . WAS UNACCEPATABLE HAS BEEN CONVERTED A SUBEXPRESSION GENSUB SZ SURTCT KILL FURTHER RETURN GENSUB L B2,SAB2 GENSUB L B3,SAB3 GENSUB L B4,SAB4 GENSUB LXI,M B2,1 GENSUB LXI,M B3,1 GENSUB LXI,M B4,1 GENSUB . RESTORE THE TABLE WHICH SHOWS WHICH INDUCTION VARIABLES . ARE USED IN THIS SUBSCRIPT L A3,SUIVCT L,H2 A1,LOOPNU . CURRENT NUMBER OF ACTIVE LOOPS SU30Y SZ A2 JNB A3,$+2 L,M A2,1 S,S4 A2,INDVAR,A1 SSL A3,1 JGD A1,SU30Y L A6,SAA6 GENSUB S A5,FL30 PROCESS RESULT OF LAST TRIAD AS IF FILE ITGENSUB S A5,A0 GENSUB L,M A13,01014 GENSUB L,M A14,01012 + OPERATOR GENSUB J SU11+1 GENSUB SU31 SZ SUBSC L,M A0,01023 SN,H2 A0,SUDMFL FLAG THAT ONLY OFFSET NO VARIABLE SUBSCRIPT S,T1 A0,F31-1,NSEQN SZ,S6 F31-1,NSEQN LNKSBX L A0,NOPER A,M A0,1 S A0,NOPER AN,M B6,1 GENSUB S B6,SUBLV DECREASE NESTING LEVEL FOR CONSTANT SUBSGENSUB J TRA SU32 TZ SUDMVR . TEST IF SUBSCRIPT FOR DUMMY ARGUMENT J SU32J TNZ,S1 BSTC1+4 . TEST IF ARRAYS ARE FLOATED J SU32J L A0,(070000,0) A,S1 A0,BSTC1+4 . ADD REGISTER TO FLOAT ON INTO INDEX CA S A0,0,*B5 L A0,(0101200,0) . INSERT PLUS OPERATOR S A0,0,*B5 SU32J L A0,(070000,0) S A0,0,*B5 L A0,(0101600,0) SUBSCRIPT DEFINER S A0,0,B5 MVW GETF SFSIXT . SAVE GETF FLAG GENSUB MVW SUBSCT SUBSC . SET GLOBAL FLAG GENSUB MVW SUBNLT SUBNL . SET GLOBAL FLAG GENSUB S R4,GETF SET FLAG TO READ FROM F31 AN,M B5,F31 S,H2 B5,GSUB SET F31 INDEX L A0,F31-1,NSEQN S A0,FL30 RESTORE FILE ITEM J SU33Q SU33RR MVW TBT TX . COMPUTE MOST LIMITING COMPUTE POINT REENT TNZ,H2 LOOPNU J SU33J LX,H2 B1,LOOPNU L A12,SUBNLT INITIALIZE ONE HIGHER LOOP GENSUB S A12,IVSQ+1,B1 IN CASE INSIDE INNER LOOP AN,M B1,1 SU33K L,2 A12,IVSQ+1,B1 TLE,2 A12,TX J SU33L L,1 A12,IVSQ+1,B1 TG,1 A12,TX FURTHER THAN LOOP IN WHICH IT HAS A BACKWARD C J SU33L JGD B1,SU33K J SU33J SU33L L A12,IVSQ+2,B1 AN A12,(1,0) S A12,SUBNLT GENSUB TZ DX11 SLJ XD11Q L,M A0,1,B1 TNE,H2 A0,LOOPNU SR,S5 R4,SUBSCT L,H2 A0,LOOPNU TG,M A0,2 J SU33J TNZ,S4 INDVAR,A0 SR,S5 R4,SUBSCT SU33J MVW SUBNLT TY MOST OOP AND MOST LIMITING COMPUTE POINGENSUB TN SUBNLT GENSUB LMJ B11,CY USBSCRIPT MVW TX SUBNLT GENSUB J *SU33R SU33Q AN,M NSEQN,1 TNZ,H2 LOOPNU J TR6 L,H2 B1,LOOPNU SU32A TZ,S4 INDVAR,B1 J SU32B L,H1 A0,INDVAR,B1 PLATEU WHICH DID NOT APPEAR IN SUBSCRIPT L,M A1,073 AND,S3 A1,LOOP+1,A0 S,S3 A2,LOOP+1,A0 CLEAR F BIT SO LOOP CAN NOT COLLAPSE SU32B AN,M B1,1 TZ,M 0,B1 J SU32A SZ CNTOP J TR6SA . TEST IF ANY NON-INDUCTION VARIABLES DEFINED IN LOOP SU40 L A1,SAB2L S A1,SUBTZ SU40Q . L,H2 A1,SORT+1,A0 OCT11 L,M A10,1 L,T3 A2,LOOP,A1 PE L,H1 A4,LOOP,A1 SEQUENCE AT PB L,H1 A5,LOOP,A2 SEQUENCE AT PE TNW,H1 A4,TBT IS DP1 IN LOOP GENSUB S,H1 R4,SUBTZ . FLAG TO CHANGE THIS INDUCTION VARIABLE OCT11 TNW,H2 A4,TBT IS DP2 IN LOOP GENSUB S,H1 R4,SUBTZ . TO ORDINARY VARIABLE TNZ SUIC3T GENSUB J $+3 TNZ SUIC4T SUBSCRIPT IS SPLIT ACRSS AN IF GENSUB J $+3 A LOGICAL IF AND MUST BE COMPUTED TNZ,H1 SUBTZ J SU40B SR,S5 R4,SUBSCT . KEEP EXPRESSIONS MOVING TO COMPUTE POINT SU40L MVW LOOP+1,A1,H2 SORT+1,A0,H2 . CHANGE PLAT TO SYM REF SR,S2 R6,SORT+1,A0 . CHANGE TO SPECIAL KIND OF INDUCTION VARIABLE SU40K L,H2 A2,SUBTZ . LEVEL COUNTER A,M A2,1 SBT A4,LOOP,A1,S4,4 . MARK FOR MATEIALIZATION TNZ SORTK,A2 J SU20 SZ,H1 SUBTZ S,H2 A2,SUBTZ L,T3 A0,SORTK,A2 . TEST IF NEXT TERM ALSO INDUCTION VARIABLE L,M A1,1 TNE,S1 A1,SORT+1,A0 J SU40Q J SU20 SU40J L,H1 A4,LOOP,A1 L,H2 A2,LOOPNU TNE,H1 A4,IVSQ,A2 J $+3 JGD A2,$-2 SLJ XERV TNE,H2 A2,LOOPNU J SU40L NO INNER LOOPS NO OPTIMIZATION TNZ,S4 INDVAR+1,A2 TEST IF INDUCTION VARIABLE FROM THIS LOOP . IS IN SUBSCRIPT IF NOT NO OPTIMIZATION J SU40M L,H1 A4,IVSQ+1,A2 AN,M A4,1 TG,H1 A4,SUBNLT GENSUB J SU40L NO OPTIMIZATION POSSIBLE J SU40K ONLY MATERIALIZE FOR INITIAL VALUE SU40M . IF ONE INDUCTION VARIABLE IS MISSING DETERMINE . IF SUBSCRIPT IS INSIDE INNER LOOPS AND BE MOVED OUT SOME MORE L A4,SEQNO SU40N TG,H2 A2,LOOPNU J SU40L NO PROPER INNER LOOPS FOUND AX,M A2,1 TLE,H1 A4,IVSQ,A2 J SU40N TNZ,S4 INDVAR,A2 THI INDUCTION VARIABLE NOT USED IN SUBSCRIPT J SU40N L,H1 A4,IVSQ,A2 SUBSCRIPT IS IN AT LEAST ONE INNER LOOP TG,H1 A4,SUBNLT GENSUB J SU40K THAT IS WITHIN SUBNL J SU40L SU40B L,H1 A4,LOOP,A2 AN,M A4,1 TG,H2 A4,SUBNLT J SU40J L,H1 A4,LOOP,A1 SEQUENCE AT PB TLE,H1 A4,SUBNLT J SU40J J SU20 $(2) . SU33R J $-$ REENT J SU33RR REENT SUBTZ +0 . H1 IS FLAG, H2 IS LEVEL COUNTER END