# New Ticket Created by  Simon Glover 
# Please include the string:  [perl #27181]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org:80/rt3/Ticket/Display.html?id=27181 >



 This code (a cut-down version of mops.pasm):

        set    I2, 0
        set    I3, 1
        set    I4, 100000000

        print  I4
        print  "\n"
        set    I1, 2
        mul    I5, I4, I1

REDO:   sub    I4, I4, I3
        if     I4, REDO

        set    N1, I5
        end

 prints '100000000' as expected when run with no optimization or with -O.
 If -O2 is used however, it prints '-1', and the hangs. Disassembly of
 the optimized bytecode shows that it is being optimized to:

  set_i_ic I3,1
  set_i_ic I4,-1
  print_sc "Iterations:    "
  print_ic -1
  print_sc "\n"
  L1:   sub_i_i I4,I3
  if_i_ic I4,L1
  end

 which is obviously incorrect.

 NB. Removal of either of the lines involving I5 makes the bug vanish.

 Simon


Reply via email to