IBM Support

LI78244: COMPILER DOES NOT USE VECTOR OPS FOR MEMSET

Subscribe

You can track all active APARs for this component.

APAR status

  • Closed as program error.

Error description

  • xlC does not take the opportunity to use vector splat immediate
    for memset.
    For input values -16..+15 for second parameter a single vspltisb
    instruction can be used to construct a vector.
    
    ===== COMPILE COMMAND:
    xlC -q64 -O2 -qlist test.cpp -qarch=pwr7 -qaltivec
    
    ===== TESTCASE:
    $ cat test.cpp
    #include <builtins.h>
    #include <string.h>
    
    void memset16(void *out)
    {
       __alignx(4,out);
       memset(out, 0, 16);
    }
    $
    
    
    ===== ACTUAL OUTPUT:
      VR's set/used:   ---- ---- ---- ----  ---- ---- ---- ----
         | 000000                           PDEF     memset16(void
    *)
         | 000000                           AKA       memset16__FPv
        4|                                  PROC      out,gr3
      398| 000000 addi     38000000   1     LI        gr0=0
      398| 000004 std      F8030000   1     ST8
    (char)(gr3,0)=gr0
      398| 000008 std      F8030008   1     ST8
    (char)(gr3,8)=gr0
        8| 00000C bclr     4E800020   1     BA        lr
         |               Tag Table
         | 000010        00000000 00092000 00000000 00000010
         |               Instruction count            4
    
    
    
    ===== EXPECTED OUTPUT:
    The output could also look like:
    xxlxor 0,0,0
    stvd2x 0,0,<out>
    

Local fix

  • N/A
    

Problem summary

  • USERS AFFECTED:
    Users who use memset are affected by this issue.
    
    PROBLEM DESCRIPTION:
    The compiler was generating inefficient code for memset code
    when -qarch=pwr7 was specified.
    

Problem conclusion

  • The compiler has been fixed so that when changing memset into
    vector instructions, the compiler uses two other instructions
    for edge cases to generate 0x00 and 0xff to have one cycle saved
    on power 7.
    

Temporary fix

Comments

APAR Information

  • APAR number

    LI78244

  • Reported component name

    XL C/C++ FOR LI

  • Reported component ID

    5725C7300

  • Reported release

    D10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2014-10-30

  • Closed date

    2014-10-30

  • Last modified date

    2014-10-30

  • APAR is sysrouted FROM one or more of the following:

    IV65273

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    XL C/C++ FOR LI

  • Fixed component ID

    5725C7300

Applicable component levels



Document information

More support for: XL C/C++ for Linux
Compiler

Software version: 13.1

Reference #: LI78244

Modified date: 30 October 2014