Guest User

Untitled

a guest
Feb 15th, 2013
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.99 KB | None | 0 0
  1.  Testing d:/code/vcngl3/sinktest1.sink
  2.  
  3.  
  4. // Variables can be:
  5. //  long (64-bit integer)
  6. //  int (32-bit integer)
  7. //  short (16-bit integer)
  8. //  char (8-bit integer)
  9. //  struct
  10.  
  11. // structure declaration test
  12. struct Test
  13. {
  14.         int a;
  15.         int b;
  16. };
  17.  
  18. func Fibonacci(int n)
  19. {
  20.         if (n <= 1)
  21.           return n;
  22.         return Fibonacci(n - 1) + Fibonacci(n - 2);
  23. }
  24.  
  25. func exit(int n)
  26. {
  27. }
  28.  
  29. // Assign short circuit eval
  30. func farfromzero(int a, int b)
  31. {
  32.         var c;
  33.         c = (a <= -5 || a >= 5);
  34.         return c;
  35. }
  36.  
  37. // Return value from short circuit eval
  38. func farfromzerodirect(int a, int b)
  39. {
  40.         return (a <= -5 || a >= 5);
  41. }
  42.  
  43. // Short circuit evaluation tests
  44.  
  45. func sce1(int a, int b)
  46. {
  47.         if ((a >= -5 && a <= 5) || (b >= -5 && b <= 5))
  48.                 exit(1);
  49. }
  50.  
  51. func sce2(int a, int b)
  52. {
  53.         if ((a >= -5 || a <= 5) && (b >= -5 || b <= 5))
  54.                 exit(1);
  55. }
  56.  
  57. func sce1e(int a, int b)
  58. {
  59.         if ((a >= -5 && a <= 5) || (b >= -5 && b <= 5))
  60.                 exit(1);
  61.         else
  62.                 exit(0);
  63. }
  64.  
  65. func sce2e(int a, int b)
  66. {
  67.         if ((a >= -5 || a <= 5) && (b >= -5 || b <= 5))
  68.                 exit(1);
  69.         else
  70.                 exit(0);
  71. }
  72.  
  73. func sce1ei(int a, int b)
  74. {
  75.         if ((a >= -5 && a <= 5) || (b >= -5 && b <= 5))
  76.                 exit(1);
  77.         else if ((a >= -500 && a <= -450) || (b >= -500 && b <= -450))
  78.                 exit(0);
  79. }
  80.  
  81. func sce2eie(int a, int b)
  82. {
  83.         if ((a >= -5 || a <= 5) && (b >= -5 || b <= 5))
  84.                 exit(1);
  85.         else if ((a >= -500 && a <= -450) || (b >= -500 && b <= -450))
  86.                 exit(0);
  87.         else
  88.                 exit(-1);
  89. }
  90.  
  91. func puts(s)
  92. {
  93.   var c;
  94.   c = s;
  95. }
  96.  
  97. (null)(0): Syntax error here ""
  98. d:/code/vcngl3/sinktest1.sink(3): or here "struct"
  99.  
  100.  
  101. ****** SYNTAX ERROR ******
  102. d:/code/vcngl3/sinktest1.sink
  103.  
  104.  
  105.  Testing func f(int a, int b) { if ((a >= -5 && a <= 5) || (b >= -5 && b <= 5)) a = 0; }
  106.  
  107. Op_Function
  108.   Op_Token: f
  109.   Op_Parameters
  110.     Op_Parameter
  111.       Op_VariableExp
  112.         Op_Token: int
  113.         Op_Token: a
  114.  
  115.  
  116.     Op_VariableExp
  117.       Op_Token: int
  118.       Op_Token: b
  119.  
  120.  
  121.   Op_If
  122.     Op_LogicalOr
  123.       Op_LogicalAnd
  124.         Op_CmpGE
  125.           Op_Token: a
  126.           Op_Negate
  127.             Op_IntegerLiteral: 5
  128.  
  129.  
  130.         Op_CmpLE
  131.           Op_Token: a
  132.           Op_IntegerLiteral: 5
  133.  
  134.  
  135.       Op_LogicalAnd
  136.         Op_CmpGE
  137.           Op_Token: b
  138.           Op_Negate
  139.             Op_IntegerLiteral: 5
  140.  
  141.  
  142.         Op_CmpLE
  143.           Op_Token: b
  144.           Op_IntegerLiteral: 5
  145.  
  146.  
  147.  
  148.     Op_Assign
  149.       Op_Token: a
  150.       Op_IntegerLiteral: 0
  151.  
  152.  
  153.  
  154. test(1): "f" defined here
  155. test(1): "a" defined here
  156. test(1): "b" defined here
  157. Op_Function
  158.   Op_FunctionName: f
  159.   Op_Parameters
  160.     Op_Parameter
  161.       Op_VariableExp
  162.         Op_Token: int
  163.         Op_VariableName: a
  164.  
  165.  
  166.     Op_VariableExp
  167.       Op_Token: int
  168.       Op_VariableName: b
  169.  
  170.  
  171.   Op_If
  172.     Op_LogicalOr
  173.       Op_LogicalAnd
  174.         Op_CmpGE
  175.           Op_VariableName: a
  176.           Op_IntegerLiteral: -5
  177.  
  178.         Op_CmpLE
  179.           Op_VariableName: a
  180.           Op_IntegerLiteral: 5
  181.  
  182.  
  183.       Op_LogicalAnd
  184.         Op_CmpGE
  185.           Op_VariableName: b
  186.           Op_IntegerLiteral: -5
  187.  
  188.         Op_CmpLE
  189.           Op_VariableName: b
  190.           Op_IntegerLiteral: 5
  191.  
  192.  
  193.  
  194.     Op_Assign
  195.       Op_VariableName: a
  196.       Op_IntegerLiteral: 0
  197.  
  198.  
  199.  
  200.  
  201. After optimization
  202.  
  203. TARGET       f
  204. PARAM        r1, a
  205. LOCAL        r2, b
  206. COPY         r4, r1
  207. LOADINT      r5, -5
  208. CMP_LT_JT    L4, r4, r5
  209. COPY         r6, r1
  210. LOADINT      r7, 5
  211. CMP_LE_JT    L3, r6, r7
  212. L4:
  213. COPY         r8, r2
  214. LOADINT      r9, -5
  215. CMP_LT_JT    L2, r8, r9
  216. COPY         r10, r2
  217. LOADINT      r11, 5
  218. CMP_GT_JT    L2, r10, r11
  219. L3:
  220. LOADINT      r1, 0
  221. L2:
  222. RETURN
  223.  
  224.  Testing func f(int a, int b) { if ((a >= -5 || a <= 5) && (b >= -5 || b <= 5)) a = 0; }
  225.  
  226. Op_Function
  227.   Op_Token: f
  228.   Op_Parameters
  229.     Op_Parameter
  230.       Op_VariableExp
  231.         Op_Token: int
  232.         Op_Token: a
  233.  
  234.  
  235.     Op_VariableExp
  236.       Op_Token: int
  237.       Op_Token: b
  238.  
  239.  
  240.   Op_If
  241.     Op_LogicalAnd
  242.       Op_LogicalOr
  243.         Op_CmpGE
  244.           Op_Token: a
  245.           Op_Negate
  246.             Op_IntegerLiteral: 5
  247.  
  248.  
  249.         Op_CmpLE
  250.           Op_Token: a
  251.           Op_IntegerLiteral: 5
  252.  
  253.  
  254.       Op_LogicalOr
  255.         Op_CmpGE
  256.           Op_Token: b
  257.           Op_Negate
  258.             Op_IntegerLiteral: 5
  259.  
  260.  
  261.         Op_CmpLE
  262.           Op_Token: b
  263.           Op_IntegerLiteral: 5
  264.  
  265.  
  266.  
  267.     Op_Assign
  268.       Op_Token: a
  269.       Op_IntegerLiteral: 0
  270.  
  271.  
  272.  
  273. test(1): "f" defined here
  274. test(1): "a" defined here
  275. test(1): "b" defined here
  276. Op_Function
  277.   Op_FunctionName: f
  278.   Op_Parameters
  279.     Op_Parameter
  280.       Op_VariableExp
  281.         Op_Token: int
  282.         Op_VariableName: a
  283.  
  284.  
  285.     Op_VariableExp
  286.       Op_Token: int
  287.       Op_VariableName: b
  288.  
  289.  
  290.   Op_If
  291.     Op_LogicalAnd
  292.       Op_LogicalOr
  293.         Op_CmpGE
  294.           Op_VariableName: a
  295.           Op_IntegerLiteral: -5
  296.  
  297.         Op_CmpLE
  298.           Op_VariableName: a
  299.           Op_IntegerLiteral: 5
  300.  
  301.  
  302.       Op_LogicalOr
  303.         Op_CmpGE
  304.           Op_VariableName: b
  305.           Op_IntegerLiteral: -5
  306.  
  307.         Op_CmpLE
  308.           Op_VariableName: b
  309.           Op_IntegerLiteral: 5
  310.  
  311.  
  312.  
  313.     Op_Assign
  314.       Op_VariableName: a
  315.       Op_IntegerLiteral: 0
  316.  
  317.  
  318.  
  319.  
  320. After optimization
  321.  
  322. TARGET       f
  323. PARAM        r1, a
  324. LOCAL        r2, b
  325. COPY         r4, r1
  326. LOADINT      r5, -5
  327. CMP_GE_JT    L4, r4, r5
  328. COPY         r6, r1
  329. LOADINT      r7, 5
  330. CMP_GT_JT    L2, r6, r7
  331. L4:
  332. COPY         r8, r2
  333. LOADINT      r9, -5
  334. CMP_GE_JT    L3, r8, r9
  335. COPY         r10, r2
  336. LOADINT      r11, 5
  337. CMP_GT_JT    L2, r10, r11
  338. L3:
  339. LOADINT      r1, 0
  340. L2:
  341. RETURN
  342.  
  343.  Testing func f(int a, int b) { if ((a >= -5 && a <= 5) || (b >= -5 && b <= 5)) a = 0; else a = 1; }
  344.  
  345. Op_Function
  346.   Op_Token: f
  347.   Op_Parameters
  348.     Op_Parameter
  349.       Op_VariableExp
  350.         Op_Token: int
  351.         Op_Token: a
  352.  
  353.  
  354.     Op_VariableExp
  355.       Op_Token: int
  356.       Op_Token: b
  357.  
  358.  
  359.   Op_IfElse
  360.     Op_LogicalOr
  361.       Op_LogicalAnd
  362.         Op_CmpGE
  363.           Op_Token: a
  364.           Op_Negate
  365.             Op_IntegerLiteral: 5
  366.  
  367.  
  368.         Op_CmpLE
  369.           Op_Token: a
  370.           Op_IntegerLiteral: 5
  371.  
  372.  
  373.       Op_LogicalAnd
  374.         Op_CmpGE
  375.           Op_Token: b
  376.           Op_Negate
  377.             Op_IntegerLiteral: 5
  378.  
  379.  
  380.         Op_CmpLE
  381.           Op_Token: b
  382.           Op_IntegerLiteral: 5
  383.  
  384.  
  385.  
  386.     Op_Assign
  387.       Op_Token: a
  388.       Op_IntegerLiteral: 0
  389.  
  390.     Op_Else
  391.       Op_Assign
  392.         Op_Token: a
  393.         Op_IntegerLiteral: 1
  394.  
  395.  
  396.  
  397.  
  398. test(1): "f" defined here
  399. test(1): "a" defined here
  400. test(1): "b" defined here
  401. Op_Function
  402.   Op_FunctionName: f
  403.   Op_Parameters
  404.     Op_Parameter
  405.       Op_VariableExp
  406.         Op_Token: int
  407.         Op_VariableName: a
  408.  
  409.  
  410.     Op_VariableExp
  411.       Op_Token: int
  412.       Op_VariableName: b
  413.  
  414.  
  415.   Op_IfElse
  416.     Op_LogicalOr
  417.       Op_LogicalAnd
  418.         Op_CmpGE
  419.           Op_VariableName: a
  420.           Op_IntegerLiteral: -5
  421.  
  422.         Op_CmpLE
  423.           Op_VariableName: a
  424.           Op_IntegerLiteral: 5
  425.  
  426.  
  427.       Op_LogicalAnd
  428.         Op_CmpGE
  429.           Op_VariableName: b
  430.           Op_IntegerLiteral: -5
  431.  
  432.         Op_CmpLE
  433.           Op_VariableName: b
  434.           Op_IntegerLiteral: 5
  435.  
  436.  
  437.  
  438.     Op_Assign
  439.       Op_VariableName: a
  440.       Op_IntegerLiteral: 0
  441.  
  442.     Op_Else
  443.       Op_Assign
  444.         Op_VariableName: a
  445.         Op_IntegerLiteral: 1
  446.  
  447.  
  448.  
  449.  
  450.  
  451. After optimization
  452.  
  453. TARGET       f
  454. PARAM        r1, a
  455. LOCAL        r2, b
  456. COPY         r4, r1
  457. LOADINT      r5, -5
  458. CMP_LT_JT    L4, r4, r5
  459. COPY         r6, r1
  460. LOADINT      r7, 5
  461. CMP_LE_JT    L3, r6, r7
  462. L4:
  463. COPY         r8, r2
  464. LOADINT      r9, -5
  465. CMP_LT_JT    L2, r8, r9
  466. COPY         r10, r2
  467. LOADINT      r11, 5
  468. CMP_GT_JT    L2, r10, r11
  469. L3:
  470. LOADINT      r1, 0
  471. GOTO         L1
  472. L2:
  473. LOADINT      r1, 1
  474. L1:
  475. RETURN
  476.  
  477.  Testing func f(int a, int b) { if ((a >= -5 || a <= 5) && (b >= -5 || b <= 5)) a = 0; else a = 1; }
  478.  
  479. Op_Function
  480.   Op_Token: f
  481.   Op_Parameters
  482.     Op_Parameter
  483.       Op_VariableExp
  484.         Op_Token: int
  485.         Op_Token: a
  486.  
  487.  
  488.     Op_VariableExp
  489.       Op_Token: int
  490.       Op_Token: b
  491.  
  492.  
  493.   Op_IfElse
  494.     Op_LogicalAnd
  495.       Op_LogicalOr
  496.         Op_CmpGE
  497.           Op_Token: a
  498.           Op_Negate
  499.             Op_IntegerLiteral: 5
  500.  
  501.  
  502.         Op_CmpLE
  503.           Op_Token: a
  504.           Op_IntegerLiteral: 5
  505.  
  506.  
  507.       Op_LogicalOr
  508.         Op_CmpGE
  509.           Op_Token: b
  510.           Op_Negate
  511.             Op_IntegerLiteral: 5
  512.  
  513.  
  514.         Op_CmpLE
  515.           Op_Token: b
  516.           Op_IntegerLiteral: 5
  517.  
  518.  
  519.  
  520.     Op_Assign
  521.       Op_Token: a
  522.       Op_IntegerLiteral: 0
  523.  
  524.     Op_Else
  525.       Op_Assign
  526.         Op_Token: a
  527.         Op_IntegerLiteral: 1
  528.  
  529.  
  530.  
  531.  
  532. test(1): "f" defined here
  533. test(1): "a" defined here
  534. test(1): "b" defined here
  535. Op_Function
  536.   Op_FunctionName: f
  537.   Op_Parameters
  538.     Op_Parameter
  539.       Op_VariableExp
  540.         Op_Token: int
  541.         Op_VariableName: a
  542.  
  543.  
  544.     Op_VariableExp
  545.       Op_Token: int
  546.       Op_VariableName: b
  547.  
  548.  
  549.   Op_IfElse
  550.     Op_LogicalAnd
  551.       Op_LogicalOr
  552.         Op_CmpGE
  553.           Op_VariableName: a
  554.           Op_IntegerLiteral: -5
  555.  
  556.         Op_CmpLE
  557.           Op_VariableName: a
  558.           Op_IntegerLiteral: 5
  559.  
  560.  
  561.       Op_LogicalOr
  562.         Op_CmpGE
  563.           Op_VariableName: b
  564.           Op_IntegerLiteral: -5
  565.  
  566.         Op_CmpLE
  567.           Op_VariableName: b
  568.           Op_IntegerLiteral: 5
  569.  
  570.  
  571.  
  572.     Op_Assign
  573.       Op_VariableName: a
  574.       Op_IntegerLiteral: 0
  575.  
  576.     Op_Else
  577.       Op_Assign
  578.         Op_VariableName: a
  579.         Op_IntegerLiteral: 1
  580.  
  581.  
  582.  
  583.  
  584.  
  585. After optimization
  586.  
  587. TARGET       f
  588. PARAM        r1, a
  589. LOCAL        r2, b
  590. COPY         r4, r1
  591. LOADINT      r5, -5
  592. CMP_GE_JT    L4, r4, r5
  593. COPY         r6, r1
  594. LOADINT      r7, 5
  595. CMP_GT_JT    L2, r6, r7
  596. L4:
  597. COPY         r8, r2
  598. LOADINT      r9, -5
  599. CMP_GE_JT    L3, r8, r9
  600. COPY         r10, r2
  601. LOADINT      r11, 5
  602. CMP_GT_JT    L2, r10, r11
  603. L3:
  604. LOADINT      r1, 0
  605. GOTO         L1
  606. L2:
  607. LOADINT      r1, 1
  608. L1:
  609. RETURN
Advertisement
Add Comment
Please, Sign In to add comment