Skip to content

Instantly share code, notes, and snippets.

@ihnorton
Last active August 29, 2015 14:19
Show Gist options
  • Save ihnorton/ec4ec85dd615c1992c0f to your computer and use it in GitHub Desktop.
Save ihnorton/ec4ec85dd615c1992c0f to your computer and use it in GitHub Desktop.
more testing for 10394

Further-reduced example function and IR (identical between 3.3 and 3.6):

julia> elty = Complex{Float64}; x = ones(elty,10); p = -1
julia> function gv(p)
               av = float(abs(1.0+0.0im))
               T = Float64
               pp::promote_type(Float64, T) = p

               sum::Float64 = av^pp
       end
gv (generic function with 1 method)

julia> @code_llvm gv(p)

; Function Attrs: uwtable
define double @julia_gv_67043(i64) #-1 {
top:
  %1 = call double inttoptr (i64 339752784 to double (double, double)*)(double 1
.000000e+00, double 0.000000e+00)
  %2 = sitofp i64 %0 to double
  %3 = call double inttoptr (i64 339772768 to double (double, double)*)(double %
1, double %2)
  %4 = fadd double %2, %1
  %5 = fcmp uno double %4, 0.000000e+00
  %6 = fcmp ord double %3, 0.000000e+00
  %7 = or i1 %6, %5
  br i1 %7, label %pass, label %fail

fail:                                             ; preds = %top
  %8 = load %jl_value_t** @jl_domain_exception, align 8
  call void @jl_throw_with_superfluous_argument(%jl_value_t* %8, i32 6)
  unreachable

pass:                                             ; preds = %top
  ret double %3
}

asm on 3.3:

julia> @code_native gv(p)
        .text
Filename: none
Source line: 2
        pushq   %rbp
        movq    %rsp, %rbp
        pushq   %rsi
        subq    $72, %rsp
        vmovaps %xmm7, -48(%rbp)
        vmovaps %xmm6, -32(%rbp)
        movq    %rcx, %rsi
        movabsq $2253728, %rax          # imm = 0x2263A0
        vmovsd  (%rax), %xmm0
        movl    $1752446800, %eax       # imm = 0x68743750
        vxorps  %xmm1, %xmm1, %xmm1
Source line: 2
        callq   *%rax       # call hypot
        vmovapd %xmm0, %xmm6
Source line: 4
        vcvtsi2sdq      %rsi, %xmm0, %xmm7
        movl    $1752466784, %eax       # imm = 0x68748560
Source line: 6
        vmovapd %xmm7, %xmm1
        callq   *%rax       # call pow
        vucomisd        %xmm0, %xmm0
        jp      L94
L77:    vmovaps -32(%rbp), %xmm6
        vmovaps -48(%rbp), %xmm7
        addq    $72, %rsp
        popq    %rsi
        popq    %rbp
        ret
L94:    vaddsd  %xmm6, %xmm7, %xmm1
        vucomisd        %xmm1, %xmm1
        jp      L77
        movabsq $jl_domain_exception, %rax
        movq    (%rax), %rcx
        movabsq $jl_throw_with_superfluous_argument, %rax
        movl    $6, %edx
        callq   *%rax

asm on 3.6:

julia> @code_native gv(p)
        .text
Filename: none
Source line: 0
        pushq   %rbp
        movq    %rsp, %rbp
        pushq   %rsi
        subq    $72, %rsp
        vmovaps %xmm7, -32(%rbp)
        vmovaps %xmm6, -48(%rbp)
        movq    %rcx, %rsi
        movabsq $341377024, %rax        # imm = 0x14590000
        vmovsd  (%rax), %xmm0
        movl    $339752784, %eax        # imm = 0x14403750
        vxorps  %xmm1, %xmm1, %xmm1
Source line: 2
        callq   *%rax        # call hypot
        vmovaps %xmm0, %xmm6
Source line: 4
        vxorps  %xmm0, %xmm0, %xmm0
        vcvtsi2sdq      %rsi, %xmm0, %xmm7
        movl    $339772768, %eax        # imm = 0x14408560
Source line: 6
        vmovaps %xmm7, %xmm1
        callq   *%rax       # call pow
        vucomisd        %xmm0, %xmm0
        jnp     L87
        vaddsd  %xmm6, %xmm7, %xmm1
        vucomisd        %xmm1, %xmm1
        jnp     L104
L87:    vmovaps -48(%rbp), %xmm6
        vmovaps -32(%rbp), %xmm7
        addq    $72, %rsp
        popq    %rsi
        popq    %rbp
        retq
L104:   movabsq $jl_domain_exception, %rax
        movq    (%rax), %rcx
        movabsq $jl_throw_with_superfluous_argument, %rax
        movl    $6, %edx
        callq   *%rax
        ud2
@ihnorton
Copy link
Author

Yes, they were swapped (edited now).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment