test compile precise-output target x86_64 function %f0(i32, i32) -> i32 { block0(v0: i32, v1: i32): v2 = icmp eq v0, v1 brif v2, block1, block2 block1: v3 = iconst.i32 1 return v3 block2: v4 = iconst.i32 2 return v4 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; cmpl %esi, %edi ; jz label2; j label1 ; block1: ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; cmpl %esi, %edi ; je 0x16 ; block2: ; offset 0xc ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x16 ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %f1(i32, i32) -> i32 { block0(v0: i32, v1: i32): v2 = icmp eq v0, v1 brif v2, block2, block1 block1: v3 = iconst.i32 1 return v3 block2: v4 = iconst.i32 2 return v4 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; cmpl %esi, %edi ; jz label2; j label1 ; block1: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; cmpl %esi, %edi ; je 0x16 ; block2: ; offset 0xc ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x16 ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %f2(i32, i32) -> i32 { block0(v0: i32, v1: i32): v2 = icmp eq v0, v1 brif v2, block1, block2 block1: v3 = iconst.i32 1 return v3 block2: v4 = iconst.i32 2 return v4 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; cmpl %esi, %edi ; jz label2; j label1 ; block1: ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; cmpl %esi, %edi ; je 0x16 ; block2: ; offset 0xc ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x16 ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %f3(f32, f32) -> i32 { block0(v0: f32, v1: f32): v2 = fcmp eq v0, v1 brif v2, block1, block2 block1: v3 = iconst.i32 1 return v3 block2: v4 = iconst.i32 2 return v4 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; ucomiss %xmm1, %xmm0 ; jp label1 ; jnz label1; j label2 ; block1: ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; ucomiss %xmm1, %xmm0 ; jp 0x13 ; je 0x1d ; block2: ; offset 0x13 ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x1d ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %f4(f32, f32) -> i8 { block0(v0: f32, v1: f32): v2 = fcmp eq v0, v1 brif v2, block2, block1 block1: v3 = iconst.i8 1 return v3 block2: v4 = iconst.i8 0 return v4 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; ucomiss %xmm1, %xmm0 ; jp label1 ; jnz label1; j label2 ; block1: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; xorl %eax, %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; ucomiss %xmm1, %xmm0 ; jp 0x13 ; je 0x1d ; block2: ; offset 0x13 ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x1d ; xorl %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %f4(f32, f32) -> i8 { block0(v0: f32, v1: f32): v2 = fcmp ne v0, v1 brif v2, block2, block1 block1: v3 = iconst.i8 1 return v3 block2: v4 = iconst.i8 0 return v4 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; ucomiss %xmm1, %xmm0 ; jp label2 ; jnz label2; j label1 ; block1: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; xorl %eax, %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; ucomiss %xmm1, %xmm0 ; jp 0x1d ; jne 0x1d ; block2: ; offset 0x13 ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x1d ; xorl %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %f5(i32) -> i8 { block0(v0: i32): br_table v0, block1, [block1, block2] block1: v1 = iconst.i8 1 return v1 block2: v2 = iconst.i8 0 return v2 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; movl $2, %r9d ; movl %edi, %r10d ; cmpl %r9d, %r10d ; cmovbl %r10d, %r9d, %r9d ; br_table %r9, %rax, %rcx ; block1: ; jmp label4 ; block2: ; jmp label4 ; block3: ; xorl %eax, %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block4: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; movl $2, %r9d ; movl %edi, %r10d ; cmpl %r9d, %r10d ; cmovbl %r10d, %r9d ; leaq 9(%rip), %rax ; movslq (%rax, %r9, 4), %rcx ; addq %rcx, %rax ; jmpq *%rax ; sbbb %al, (%rax) ; addb %al, (%rax) ; adcl %eax, (%rax) ; addb %al, (%rax) ; sbbb %al, (%rax) ; addb %al, (%rax) ; block2: ; offset 0x30 ; jmp 0x3c ; block3: ; offset 0x35 ; xorl %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block4: ; offset 0x3c ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %f6(i64) -> i8 { block0(v0: i64): v1 = iconst.i64 0 v2 = icmp slt v0, v1 brif v2, block1, block2 block1: v3 = iconst.i8 1 return v3 block2: v4 = iconst.i8 0 return v4 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; testq %rdi, %rdi ; jl label2; j label1 ; block1: ; xorl %eax, %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; testq %rdi, %rdi ; jl 0x14 ; block2: ; offset 0xd ; xorl %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x14 ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %f7(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0 v2 = icmp slt v0, v1 brif v2, block1, block2 block1: v3 = iconst.i8 1 return v3 block2: v4 = iconst.i8 0 return v4 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; testl %edi, %edi ; jl label2; j label1 ; block1: ; xorl %eax, %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; testl %edi, %edi ; jl 0x13 ; block2: ; offset 0xc ; xorl %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x13 ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %f8(i64) -> i8 { block0(v0: i64): v1 = iconst.i64 0 v2 = icmp eq v0, v1 brif v2, block1, block2 block1: v3 = iconst.i8 1 return v3 block2: v4 = iconst.i8 0 return v4 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; testq %rdi, %rdi ; jz label2; j label1 ; block1: ; xorl %eax, %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; testq %rdi, %rdi ; je 0x14 ; block2: ; offset 0xd ; xorl %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x14 ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %f9(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0 v2 = icmp eq v0, v1 brif v2, block1, block2 block1: v3 = iconst.i8 1 return v3 block2: v4 = iconst.i8 0 return v4 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; testl %edi, %edi ; jz label2; j label1 ; block1: ; xorl %eax, %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; testl %edi, %edi ; je 0x13 ; block2: ; offset 0xc ; xorl %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x13 ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %f10(i64) -> i8 { block0(v0: i64): v1 = iconst.i64 0 v2 = icmp slt v1, v0 brif v2, block1, block2 block1: v3 = iconst.i8 1 return v3 block2: v4 = iconst.i8 0 return v4 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; testq %rdi, %rdi ; jnle label2; j label1 ; block1: ; xorl %eax, %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; testq %rdi, %rdi ; jg 0x14 ; block2: ; offset 0xd ; xorl %eax, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x14 ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %fflags(f32) { block200(v0: f32): v1 = f32const 0x34.0p0 v2 = fcmp eq v0, v1 brif v2, block201, block400 block400: v3 = fcmp ord v0, v1 brif v3, block202, block201 block401: return block201: return block202: trap heap_oob } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; movl $1112539136, %eax ; movd %eax, %xmm4 ; ucomiss %xmm4, %xmm0 ; jp label2 ; jnz label2; j label1 ; block1: ; jmp label5 ; block2: ; ucomiss %xmm4, %xmm0 ; jnp label4; j label3 ; block3: ; jmp label5 ; block4: ; ud2 heap_oob ; block5: ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; movl $0x42500000, %eax ; movd %eax, %xmm4 ; ucomiss %xmm4, %xmm0 ; jp 0x1c ; je 0x27 ; block2: ; offset 0x1c ; ucomiss %xmm4, %xmm0 ; jp 0x27 ; block3: ; offset 0x25 ; ud2 ; trap: heap_oob ; block4: ; offset 0x27 ; movq %rbp, %rsp ; popq %rbp ; retq function %br_i8_icmp(i32, i32) -> i32 { block0(v0: i32, v1: i32): v2 = icmp eq v0, v1 v3 = uextend.i32 v2 brif v3, block1, block2 block1: v4 = iconst.i32 1 return v4 block2: v5 = iconst.i32 2 return v5 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; cmpl %esi, %edi ; jz label2; j label1 ; block1: ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; cmpl %esi, %edi ; je 0x16 ; block2: ; offset 0xc ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x16 ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %br_i8_fcmp(f32, f32) -> i32 { block0(v0: f32, v1: f32): v2 = fcmp eq v0, v1 v3 = uextend.i32 v2 brif v3, block1, block2 block1: v4 = iconst.i32 1 return v4 block2: v5 = iconst.i32 2 return v5 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; ucomiss %xmm1, %xmm0 ; jp label1 ; jnz label1; j label2 ; block1: ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; ucomiss %xmm1, %xmm0 ; jp 0x13 ; je 0x1d ; block2: ; offset 0x13 ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x1d ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %brif_i8_icmp(i32, i32) -> i32 { block0(v0: i32, v1: i32): v2 = icmp eq v0, v1 v3 = uextend.i32 v2 brif v3, block1, block2 block1: v4 = iconst.i32 1 return v4 block2: v5 = iconst.i32 2 return v5 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; cmpl %esi, %edi ; jz label2; j label1 ; block1: ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; cmpl %esi, %edi ; je 0x16 ; block2: ; offset 0xc ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x16 ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %brif_i8_fcmp(f32, f32) -> i32 { block0(v0: f32, v1: f32): v2 = fcmp eq v0, v1 v3 = uextend.i32 v2 brif v3, block1, block2 block1: v4 = iconst.i32 1 return v4 block2: v5 = iconst.i32 2 return v5 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; ucomiss %xmm1, %xmm0 ; jp label1 ; jnz label1; j label2 ; block1: ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; block2: ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; ucomiss %xmm1, %xmm0 ; jp 0x13 ; je 0x1d ; block2: ; offset 0x13 ; movl $2, %eax ; movq %rbp, %rsp ; popq %rbp ; retq ; block3: ; offset 0x1d ; movl $1, %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %br_table_i32(i32) -> i32 { block0(v0: i32): br_table v0, block4, [block1, block2, block2, block3] block1: v1 = iconst.i32 1 jump block5(v1) block2: v2 = iconst.i32 2 jump block5(v2) block3: v3 = iconst.i32 3 jump block5(v3) block4: v4 = iconst.i32 4 jump block5(v4) block5(v5: i32): v6 = iadd.i32 v0, v5 return v6 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; movl $4, %eax ; movl %edi, %ecx ; cmpl %eax, %ecx ; cmovbl %ecx, %eax, %eax ; br_table %rax, %r9, %r10 ; block1: ; jmp label4 ; block2: ; jmp label4 ; block3: ; movl $3, %esi ; jmp label7 ; block4: ; movl $2, %esi ; jmp label7 ; block5: ; movl $1, %esi ; jmp label7 ; block6: ; movl $4, %esi ; jmp label7 ; block7: ; lea 0(%rdi,%rsi,1), %eax ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; movl $4, %eax ; movl %edi, %ecx ; cmpl %eax, %ecx ; cmovbl %ecx, %eax ; leaq 0xa(%rip), %r9 ; movslq (%r9, %rax, 4), %r10 ; addq %r10, %r9 ; jmpq *%r9 ; subl $0x23000000, %eax ; addb %al, (%rax) ; addb %ah, (%rbx) ; addb %al, (%rax) ; addb %bl, (%rcx) ; addb %al, (%rax) ; addb %dh, (%rdi) ; addb %al, (%rax) ; block2: ; offset 0x35 ; jmp 0x44 ; block3: ; offset 0x3a ; movl $3, %esi ; jmp 0x5d ; block4: ; offset 0x44 ; movl $2, %esi ; jmp 0x5d ; block5: ; offset 0x4e ; movl $1, %esi ; jmp 0x5d ; block6: ; offset 0x58 ; movl $4, %esi ; block7: ; offset 0x5d ; leal (%rdi, %rsi), %eax ; movq %rbp, %rsp ; popq %rbp ; retq function %br_table_i32_inline(i32) -> i32 { block0(v0: i32): v1 = iconst.i32 1 v2 = iconst.i32 2 v3 = iconst.i32 3 v4 = iconst.i32 4 br_table v0, block1(v4), [block1(v1), block1(v2), block1(v2), block1(v3)] block1(v5: i32): return v5 } ; VCode: ; pushq %rbp ; movq %rsp, %rbp ; block0: ; movl $1, %r10d ; movl $2, %r11d ; movl $3, %esi ; movl $4, %eax ; movl $4, %r8d ; movl %edi, %r9d ; cmpl %r8d, %r9d ; cmovbl %r9d, %r8d, %r8d ; br_table %r8, %rdi, %rcx ; block1: ; jmp label6 ; block2: ; movq %r10, %rax ; jmp label6 ; block3: ; movq %r11, %rax ; jmp label6 ; block4: ; movq %r11, %rax ; jmp label6 ; block5: ; movq %rsi, %rax ; jmp label6 ; block6: ; movq %rbp, %rsp ; popq %rbp ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; pushq %rbp ; movq %rsp, %rbp ; block1: ; offset 0x4 ; movl $1, %r10d ; movl $2, %r11d ; movl $3, %esi ; movl $4, %eax ; movl $4, %r8d ; movl %edi, %r9d ; cmpl %r8d, %r9d ; cmovbl %r9d, %r8d ; leaq 9(%rip), %rdi ; movslq (%rdi, %r8, 4), %rcx ; addq %rcx, %rdi ; jmpq *%rdi ; sbbl %eax, (%rax) ; addb %al, (%rax) ; andl %eax, (%rax) ; addb %al, (%rax) ; subl %eax, (%rax) ; addb %al, (%rax) ; xorl %eax, (%rax) ; addb %al, (%rax) ; xorb $0, %al ; addb %al, (%rax) ; block2: ; offset 0x4e ; jmp 0x6e ; block3: ; offset 0x53 ; movq %r10, %rax ; jmp 0x6e ; block4: ; offset 0x5b ; movq %r11, %rax ; jmp 0x6e ; block5: ; offset 0x63 ; movq %r11, %rax ; jmp 0x6e ; block6: ; offset 0x6b ; movq %rsi, %rax ; block7: ; offset 0x6e ; movq %rbp, %rsp ; popq %rbp ; retq