<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p>Hi Reid,</p>
    <p>Sorry for the trouble. Looks the condition for the CLZ
      availability is not right. <br>
    </p>
    <p>Please review the fix below.<br>
    </p>
    <p><a class="moz-txt-link-freetext" href="https://reviews.llvm.org/D27530">https://reviews.llvm.org/D27530</a></p>
    <p><br>
    </p>
    <p>Weiming<br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 12/7/2016 9:47 AM, Reid Kleckner
      wrote:<br>
    </div>
    <blockquote
cite="mid:CACs=ty+kHBG75BMAcAxEbJTss_C_zDdsNWA3vN86G46ePsGaBQ@mail.gmail.com"
      type="cite">
      <div dir="ltr">With this CL, we can no longer build compiler-rt
        with clang from XCode 7.0:
        <div><a moz-do-not-send="true"
href="https://build.chromium.org/p/chromium.fyi/builders/ClangToTMac%20%28dbg%29/builds/7185/steps/gclient%20runhooks/logs/stdio">https://build.chromium.org/p/chromium.fyi/builders/ClangToTMac%20%28dbg%29/builds/7185/steps/gclient%20runhooks/logs/stdio</a><br>
        </div>
        <div>
          <div><br>
          </div>
          <div>FAILED:
lib/builtins/CMakeFiles/clang_rt.hard_pic_armv7em_macho_embedded.dir/arm/clzdi2.S.o </div>
          <div>/Applications/Xcode7.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
               ...</div>
          <div>/b/c/b/ClangToTMac__dbg_/src/third_party/llvm/compiler-rt/lib/builtins/arm/clzdi2.S:58:2:
            error: predicated instructions must be in IT block</div>
          <div> movne r0, r1</div>
          <div> ^</div>
          <div>/b/c/b/ClangToTMac__dbg_/src/third_party/llvm/compiler-rt/lib/builtins/arm/clzdi2.S:60:2:
            error: predicated instructions must be in IT block</div>
          <div> movne r1, 1</div>
          <div> ^</div>
        </div>
        <div>...</div>
        <div><br>
        </div>
        <div>With the changed __ARM_FEATURE_CLZ ifdef, now something
          goes wrong.</div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Mon, Dec 5, 2016 at 11:13 PM,
          Weiming Zhao via llvm-commits <span dir="ltr"><<a
              moz-do-not-send="true"
              href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">Author:
            weimingz<br>
            Date: Tue Dec  6 01:13:15 2016<br>
            New Revision: 288777<br>
            <br>
            URL: <a moz-do-not-send="true"
              href="http://llvm.org/viewvc/llvm-project?rev=288777&view=rev"
              rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=288777&view=rev</a><br>
            Log:<br>
            builtins: Add ARM Thumb1 implementation for uidiv and
            uidivmod<br>
            <br>
            This is a resubmit of r288710 due to breakage of Darwin
            armv7em.<br>
            <br>
            Modified:<br>
                compiler-rt/trunk/lib/<wbr>builtins/arm/aeabi_uidivmod.S<br>
                compiler-rt/trunk/lib/<wbr>builtins/arm/udivsi3.S<br>
                compiler-rt/trunk/lib/<wbr>builtins/assembly.h<br>
            <br>
            Modified: compiler-rt/trunk/lib/<wbr>builtins/arm/aeabi_uidivmod.S<br>
            URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/aeabi_uidivmod.S?rev=288777&r1=288776&r2=288777&view=diff"
              rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>builtins/arm/aeabi_uidivmod.S?<wbr>rev=288777&r1=288776&r2=<wbr>288777&view=diff</a><br>
            ==============================<wbr>==============================<wbr>==================<br>
            --- compiler-rt/trunk/lib/<wbr>builtins/arm/aeabi_uidivmod.S
            (original)<br>
            +++ compiler-rt/trunk/lib/<wbr>builtins/arm/aeabi_uidivmod.S
            Tue Dec  6 01:13:15 2016<br>
            @@ -23,6 +23,20 @@<br>
                     .syntax unified<br>
                     .p2align 2<br>
             DEFINE_COMPILERRT_FUNCTION(__<wbr>aeabi_uidivmod)<br>
            +#if __ARM_ARCH_ISA_THUMB == 1<br>
            +        cmp     r0, r1<br>
            +        bcc     LOCAL_LABEL(case_denom_larger)<br>
            +        push    {r0, r1, lr}<br>
            +        bl      SYMBOL_NAME(__aeabi_uidiv)<br>
            +        pop     {r1, r2, r3}<br>
            +        muls    r2, r2, r0 // r2 = quot * denom<br>
            +        subs    r1, r1, r2<br>
            +        JMP     (r3)<br>
            +LOCAL_LABEL(case_denom_<wbr>larger):<br>
            +        movs    r1, r0<br>
            +        movs    r0, #0<br>
            +        JMP     (lr)<br>
            +#else<br>
                     push    { lr }<br>
                     sub     sp, sp, #4<br>
                     mov     r2, sp<br>
            @@ -35,6 +49,7 @@ DEFINE_COMPILERRT_FUNCTION(__<wbr>aeabi_uidiv<br>
                     ldr     r1, [sp]<br>
                     add     sp, sp, #4<br>
                     pop     { pc }<br>
            +#endif<br>
             END_COMPILERRT_FUNCTION(__<wbr>aeabi_uidivmod)<br>
            <br>
             NO_EXEC_STACK_DIRECTIVE<br>
            <br>
            Modified: compiler-rt/trunk/lib/<wbr>builtins/arm/udivsi3.S<br>
            URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/udivsi3.S?rev=288777&r1=288776&r2=288777&view=diff"
              rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>builtins/arm/udivsi3.S?rev=<wbr>288777&r1=288776&r2=288777&<wbr>view=diff</a><br>
            ==============================<wbr>==============================<wbr>==================<br>
            --- compiler-rt/trunk/lib/<wbr>builtins/arm/udivsi3.S
            (original)<br>
            +++ compiler-rt/trunk/lib/<wbr>builtins/arm/udivsi3.S Tue
            Dec  6 01:13:15 2016<br>
            @@ -40,12 +40,26 @@ DEFINE_COMPILERRT_FUNCTION(__<wbr>udivsi3)<br>
             #else<br>
                    cmp     r1, #1<br>
                    bcc     LOCAL_LABEL(divby0)<br>
            +#if __ARM_ARCH_ISA_THUMB == 1<br>
            +       bne LOCAL_LABEL(num_neq_denom)<br>
            +       JMP(lr)<br>
            +LOCAL_LABEL(num_neq_denom):<br>
            +#else<br>
                    IT(eq)<br>
                    JMPc(lr, eq)<br>
            +#endif<br>
                    cmp     r0, r1<br>
            +#if __ARM_ARCH_ISA_THUMB == 1<br>
            +       bhs LOCAL_LABEL(num_ge_denom)<br>
            +       movs r0, #0<br>
            +       JMP(lr)<br>
            +LOCAL_LABEL(num_ge_denom):<br>
            +#else<br>
                    ITT(cc)<br>
                    movcc   r0, #0<br>
                    JMPc(lr, cc)<br>
            +#endif<br>
            +<br>
                    /*<br>
                     * Implement division using binary long division
            algorithm.<br>
                     *<br>
            @@ -62,7 +76,7 @@ DEFINE_COMPILERRT_FUNCTION(__<wbr>udivsi3)<br>
                     * that (r0 << shift) < 2 * r1. The
            quotient is stored in r3.<br>
                     */<br>
            <br>
            -#  ifdef __ARM_FEATURE_CLZ<br>
            +#  if defined(__ARM_FEATURE_CLZ)<br>
                    clz     ip, r0<br>
                    clz     r3, r1<br>
                    /* r0 >= r1 implies clz(r0) <= clz(r1), so ip
            <= r3. */<br>
            @@ -77,49 +91,128 @@ DEFINE_COMPILERRT_FUNCTION(__<wbr>udivsi3)<br>
                    sub     ip, ip, r3, lsl #3<br>
                    mov     r3, #0<br>
                    bx      ip<br>
            -#  else<br>
            +#  else /* No CLZ Feature */<br>
             #    if __ARM_ARCH_ISA_THUMB == 2<br>
             #    error THUMB mode requires CLZ or UDIV<br>
             #    endif<br>
            +#    if __ARM_ARCH_ISA_THUMB == 1<br>
            +#      define BLOCK_SIZE 10<br>
            +#    else<br>
            +#      define BLOCK_SIZE 12<br>
            +#    endif<br>
            +<br>
                    mov     r2, r0<br>
            +#    if __ARM_ARCH_ISA_THUMB == 1<br>
            +       mov ip, r0<br>
            +       adr r0, LOCAL_LABEL(div0block)<br>
            +       adds r0, #1<br>
            +#    else<br>
                    adr     ip, LOCAL_LABEL(div0block)<br>
            -<br>
            -       lsr     r3, r2, #16<br>
            +#    endif<br>
            +       lsrs    r3, r2, #16<br>
                    cmp     r3, r1<br>
            +#    if __ARM_ARCH_ISA_THUMB == 1<br>
            +       blo LOCAL_LABEL(skip_16)<br>
            +       movs r2, r3<br>
            +       subs r0, r0, #(16 * BLOCK_SIZE)<br>
            +LOCAL_LABEL(skip_16):<br>
            +#    else<br>
                    movhs   r2, r3<br>
            -       subhs   ip, ip, #(16 * 12)<br>
            +       subhs   ip, ip, #(16 * BLOCK_SIZE)<br>
            +#    endif<br>
            <br>
            -       lsr     r3, r2, #8<br>
            +       lsrs    r3, r2, #8<br>
                    cmp     r3, r1<br>
            +#    if __ARM_ARCH_ISA_THUMB == 1<br>
            +       blo LOCAL_LABEL(skip_8)<br>
            +       movs r2, r3<br>
            +       subs r0, r0, #(8 * BLOCK_SIZE)<br>
            +LOCAL_LABEL(skip_8):<br>
            +#    else<br>
                    movhs   r2, r3<br>
            -       subhs   ip, ip, #(8 * 12)<br>
            +       subhs   ip, ip, #(8 * BLOCK_SIZE)<br>
            +#    endif<br>
            <br>
            -       lsr     r3, r2, #4<br>
            +       lsrs    r3, r2, #4<br>
                    cmp     r3, r1<br>
            +#    if __ARM_ARCH_ISA_THUMB == 1<br>
            +       blo LOCAL_LABEL(skip_4)<br>
            +       movs r2, r3<br>
            +       subs r0, r0, #(4 * BLOCK_SIZE)<br>
            +LOCAL_LABEL(skip_4):<br>
            +#    else<br>
                    movhs   r2, r3<br>
            -       subhs   ip, #(4 * 12)<br>
            +       subhs   ip, #(4 * BLOCK_SIZE)<br>
            +#    endif<br>
            <br>
            -       lsr     r3, r2, #2<br>
            +       lsrs    r3, r2, #2<br>
                    cmp     r3, r1<br>
            +#    if __ARM_ARCH_ISA_THUMB == 1<br>
            +       blo LOCAL_LABEL(skip_2)<br>
            +       movs r2, r3<br>
            +       subs r0, r0, #(2 * BLOCK_SIZE)<br>
            +LOCAL_LABEL(skip_2):<br>
            +#    else<br>
                    movhs   r2, r3<br>
            -       subhs   ip, ip, #(2 * 12)<br>
            +       subhs   ip, ip, #(2 * BLOCK_SIZE)<br>
            +#    endif<br>
            <br>
                    /* Last block, no need to update r2 or r3. */<br>
            +#    if __ARM_ARCH_ISA_THUMB == 1<br>
            +       lsrs r3, r2, #1<br>
            +       cmp r3, r1<br>
            +       blo LOCAL_LABEL(skip_1)<br>
            +       subs r0, r0, #(1 * BLOCK_SIZE)<br>
            +LOCAL_LABEL(skip_1):<br>
            +       movs r2, r0<br>
            +       mov r0, ip<br>
            +       movs r3, #0<br>
            +       JMP (r2)<br>
            +<br>
            +#    else<br>
                    cmp     r1, r2, lsr #1<br>
            -       subls   ip, ip, #(1 * 12)<br>
            +       subls   ip, ip, #(1 * BLOCK_SIZE)<br>
            <br>
            -       mov     r3, #0<br>
            +       movs    r3, #0<br>
            <br>
                    JMP(ip)<br>
            -#  endif<br>
            +#    endif<br>
            +#  endif /* __ARM_FEATURE_CLZ */<br>
            +<br>
            <br>
             #define        IMM     #<br>
            +       /* due to the range limit of branch in Thumb1, we
            have to place the<br>
            +                block closer */<br>
            +LOCAL_LABEL(divby0):<br>
            +       movs    r0, #0<br>
            +#      if defined(__ARM_EABI__)<br>
            +       bl      __aeabi_idiv0 // due to relocation limit,
            can't use b.<br>
            +#      endif<br>
            +       JMP(lr)<br>
            <br>
            +<br>
            +#if __ARM_ARCH_ISA_THUMB == 1<br>
            +#define block(shift)                                       
                               \<br>
            +       lsls r2, r1, IMM shift;                             
                                    \<br>
            +       cmp r0, r2;                                         
                                    \<br>
            +       blo LOCAL_LABEL(block_skip_##<wbr>shift);           
                                         \<br>
            +       subs r0, r0, r2;                                   
                                     \<br>
            +       LOCAL_LABEL(block_skip_##<wbr>shift) :;             
                                         \<br>
            +       adcs r3, r3 /* same as ((r3 << 1) | Carry).
            Carry is set if r0 >= r2. */<br>
            +<br>
            +       /* TODO: if current location counter is not not word
            aligned, we don't<br>
            +                need the .p2align and nop */<br>
            +       /* Label div0block must be word-aligned. First align
            block 31 */<br>
            +       .p2align 2<br>
            +       nop /* Padding to align div0block as 31 blocks = 310
            bytes */<br>
            +<br>
            +#else<br>
             #define block(shift)                                       
                               \<br>
                    cmp     r0, r1, lsl IMM shift;                     
                               \<br>
                    ITT(hs);                                           
                               \<br>
                    WIDE(addhs)     r3, r3, IMM (1 << shift);     
                                    \<br>
                    WIDE(subhs)     r0, r0, r1, lsl IMM shift<br>
            +#endif<br>
            <br>
                    block(31)<br>
                    block(30)<br>
            @@ -159,12 +252,14 @@ LOCAL_LABEL(div0block):<br>
                    JMP(lr)<br>
             #endif /* __ARM_ARCH_EXT_IDIV__ */<br>
            <br>
            +#if __ARM_ARCH_EXT_IDIV__<br>
             LOCAL_LABEL(divby0):<br>
            -       mov     r0, #0<br>
            -#ifdef __ARM_EABI__<br>
            -       b       __aeabi_idiv0<br>
            -#else<br>
            -       JMP(lr)<br>
            +        mov     r0, #0<br>
            +#  ifdef __ARM_EABI__<br>
            +        b       __aeabi_idiv0<br>
            +#  else<br>
            +        JMP(lr)<br>
            +#  endif<br>
             #endif<br>
            <br>
             END_COMPILERRT_FUNCTION(__<wbr>udivsi3)<br>
            <br>
            Modified: compiler-rt/trunk/lib/<wbr>builtins/assembly.h<br>
            URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/assembly.h?rev=288777&r1=288776&r2=288777&view=diff"
              rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>builtins/assembly.h?rev=<wbr>288777&r1=288776&r2=288777&<wbr>view=diff</a><br>
            ==============================<wbr>==============================<wbr>==================<br>
            --- compiler-rt/trunk/lib/<wbr>builtins/assembly.h
            (original)<br>
            +++ compiler-rt/trunk/lib/<wbr>builtins/assembly.h Tue Dec 
            6 01:13:15 2016<br>
            @@ -71,7 +71,8 @@<br>
             #define ARM_HAS_BX<br>
             #endif<br>
             #if !defined(__ARM_FEATURE_CLZ) &&                 
                                       \<br>
            -    (__ARM_ARCH >= 6 || (__ARM_ARCH == 5 &&
            !defined(__ARM_ARCH_5__)))<br>
            +    ((__ARM_ARCH >= 6 && __ARM_ARCH_PROFILE !=
            'M') ||                         \<br>
            +     (__ARM_ARCH == 5 && !defined(__ARM_ARCH_5__)))<br>
             #define __ARM_FEATURE_CLZ<br>
             #endif<br>
            <br>
            <br>
            <br>
            ______________________________<wbr>_________________<br>
            llvm-commits mailing list<br>
            <a moz-do-not-send="true"
              href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
            <a moz-do-not-send="true"
              href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits"
              rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation</pre>
  </body>
</html>