aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/CodeGen/X86/pr62145.ll
blob: 38208422be6b4090bd70fe5b6b86b367c891b494 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefixes=X86
; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=X64

define void @f(i64 %a, i64 %b) nounwind {
; X86-LABEL: f:
; X86:       # %bb.0: # %entry
; X86-NEXT:    pushl %edi
; X86-NEXT:    pushl %esi
; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
; X86-NEXT:    movl $-65536, %edi # imm = 0xFFFF0000
; X86-NEXT:    cmpl $65527, %eax # imm = 0xFFF7
; X86-NEXT:    jne .LBB0_2
; X86-NEXT:  # %bb.1: # %if.then
; X86-NEXT:    calll ext1@PLT
; X86-NEXT:  .LBB0_2: # %if.end
; X86-NEXT:    calll ext2@PLT
; X86-NEXT:    andl %edi, %esi
; X86-NEXT:    cmpl $-589824, %esi # imm = 0xFFF70000
; X86-NEXT:    jne .LBB0_3
; X86-NEXT:  # %bb.4: # %if.then2
; X86-NEXT:    popl %esi
; X86-NEXT:    popl %edi
; X86-NEXT:    jmp ext1@PLT # TAILCALL
; X86-NEXT:  .LBB0_3: # %if.end3
; X86-NEXT:    popl %esi
; X86-NEXT:    popl %edi
; X86-NEXT:    retl
;
; X64-LABEL: f:
; X64:       # %bb.0: # %entry
; X64-NEXT:    pushq %r14
; X64-NEXT:    pushq %rbx
; X64-NEXT:    pushq %rax
; X64-NEXT:    movq %rsi, %rbx
; X64-NEXT:    movabsq $-281474976710656, %r14 # imm = 0xFFFF000000000000
; X64-NEXT:    shrq $48, %rdi
; X64-NEXT:    cmpl $65527, %edi # imm = 0xFFF7
; X64-NEXT:    jne .LBB0_2
; X64-NEXT:  # %bb.1: # %if.then
; X64-NEXT:    callq ext1@PLT
; X64-NEXT:  .LBB0_2: # %if.end
; X64-NEXT:    callq ext2@PLT
; X64-NEXT:    andq %r14, %rbx
; X64-NEXT:    movabsq $-2533274790395904, %rax # imm = 0xFFF7000000000000
; X64-NEXT:    addq $8, %rsp
; X64-NEXT:    cmpq %rax, %rbx
; X64-NEXT:    jne .LBB0_3
; X64-NEXT:  # %bb.4: # %if.then2
; X64-NEXT:    popq %rbx
; X64-NEXT:    popq %r14
; X64-NEXT:    jmp ext1@PLT # TAILCALL
; X64-NEXT:  .LBB0_3: # %if.end3
; X64-NEXT:    popq %rbx
; X64-NEXT:    popq %r14
; X64-NEXT:    retq
entry:
  %shr.mask.i = and i64 %a, -281474976710656
  %cmp.i = icmp eq i64 %shr.mask.i, -2533274790395904
  br i1 %cmp.i, label %if.then, label %if.end

if.then:
  tail call void @ext1()
  br label %if.end

if.end:
  tail call void @ext2()
  %shr.mask.i4 = and i64 %b, -281474976710656
  %cmp.i5 = icmp eq i64 %shr.mask.i4, -2533274790395904
  br i1 %cmp.i5, label %if.then2, label %if.end3

if.then2:
  tail call void @ext1()
  br label %if.end3

if.end3:
  ret void
}
declare void @ext1()
declare void @ext2()