5 Replies Latest reply on Aug 10, 2012 1:46 AM by santosh.zanjurne

    opencc 4.5.1 doesn't vectorize expm1()

    Melkhior

      Hello,

      I'm trying to recompile one of my code to exploit the Bulldozer architecture efficiently. Both ICC and XLC manages to vectorize the most critical loop. But opencc 4.5.1 fails with:

      #####

      (1.I:426) Do loop has unmapped loads/stores/calls, loop was not intrinsic vectorized!

      #####

      The strange thing is, if I add at the beggining of the file:

      #define expm1(a) (exp(a)-1.)

      then I get:

      #####

      (1.I:427) Expression rooted at op "OPC_IF"(line 427) is not vectorizable. Loop was not vectorized.

      (1.I:427) LOOP WAS VECTORIZED FOR VECTOR INTRINSIC ROUTINE(S).

      (1.I:427) LOOP WAS VECTORIZED FOR VECTOR INTRINSIC ROUTINE(S).

      (1.I:427) LOOP WAS VECTORIZED FOR VECTOR INTRINSIC ROUTINE(S).

      #####

      Apparently, it fails at vectorizing expm1(). The patched version using exp()-1. is not acceptable, as it's nowhere near accurate enough when input values are close to 0.

      Is that the expected behavior?

       

      Cordially,