Use Align for TFL::TransientStackAlignment
[llvm-core.git] / test / CodeGen / X86 / xor-icmp.ll
blob1b5acce51d553c4580e0a779eb6d74159bf06ef3
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-unknown   | FileCheck %s -check-prefix=X32
3 ; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s -check-prefix=X64
4 ; rdar://7367229
6 define i32 @t(i32 %a, i32 %b) nounwind ssp {
7 ; X32-LABEL: t:
8 ; X32:       # %bb.0: # %entry
9 ; X32-NEXT:    movb {{[0-9]+}}(%esp), %al
10 ; X32-NEXT:    xorb {{[0-9]+}}(%esp), %al
11 ; X32-NEXT:    testb $64, %al
12 ; X32-NEXT:    je .LBB0_1
13 ; X32-NEXT:  # %bb.2: # %bb1
14 ; X32-NEXT:    jmp bar # TAILCALL
15 ; X32-NEXT:  .LBB0_1: # %bb
16 ; X32-NEXT:    jmp foo # TAILCALL
18 ; X64-LABEL: t:
19 ; X64:       # %bb.0: # %entry
20 ; X64-NEXT:    xorl %esi, %edi
21 ; X64-NEXT:    xorl %eax, %eax
22 ; X64-NEXT:    testl $16384, %edi # imm = 0x4000
23 ; X64-NEXT:    je .LBB0_1
24 ; X64-NEXT:  # %bb.2: # %bb1
25 ; X64-NEXT:    jmp bar # TAILCALL
26 ; X64-NEXT:  .LBB0_1: # %bb
27 ; X64-NEXT:    jmp foo # TAILCALL
28 entry:
29   %0 = and i32 %a, 16384
30   %1 = icmp ne i32 %0, 0
31   %2 = and i32 %b, 16384
32   %3 = icmp ne i32 %2, 0
33   %4 = xor i1 %1, %3
34   br i1 %4, label %bb1, label %bb
36 bb:                                               ; preds = %entry
37   %5 = tail call i32 (...) @foo() nounwind       ; <i32> [#uses=1]
38   ret i32 %5
40 bb1:                                              ; preds = %entry
41   %6 = tail call i32 (...) @bar() nounwind       ; <i32> [#uses=1]
42   ret i32 %6
45 declare i32 @foo(...)
47 declare i32 @bar(...)
49 define i32 @t2(i32 %x, i32 %y) nounwind ssp {
50 ; X32-LABEL: t2:
51 ; X32:       # %bb.0: # %entry
52 ; X32-NEXT:    cmpl $0, {{[0-9]+}}(%esp)
53 ; X32-NEXT:    sete %al
54 ; X32-NEXT:    cmpl $0, {{[0-9]+}}(%esp)
55 ; X32-NEXT:    sete %cl
56 ; X32-NEXT:    cmpb %al, %cl
57 ; X32-NEXT:    je .LBB1_1
58 ; X32-NEXT:  # %bb.2: # %bb
59 ; X32-NEXT:    jmp foo # TAILCALL
60 ; X32-NEXT:  .LBB1_1: # %return
61 ; X32-NEXT:    retl
63 ; X64-LABEL: t2:
64 ; X64:       # %bb.0: # %entry
65 ; X64-NEXT:    testl %edi, %edi
66 ; X64-NEXT:    sete %al
67 ; X64-NEXT:    testl %esi, %esi
68 ; X64-NEXT:    sete %cl
69 ; X64-NEXT:    cmpb %al, %cl
70 ; X64-NEXT:    je .LBB1_1
71 ; X64-NEXT:  # %bb.2: # %bb
72 ; X64-NEXT:    xorl %eax, %eax
73 ; X64-NEXT:    jmp foo # TAILCALL
74 ; X64-NEXT:  .LBB1_1: # %return
75 ; X64-NEXT:    retq
77 entry:
78   %0 = icmp eq i32 %x, 0                          ; <i1> [#uses=1]
79   %1 = icmp eq i32 %y, 0                          ; <i1> [#uses=1]
80   %2 = xor i1 %1, %0                              ; <i1> [#uses=1]
81   br i1 %2, label %bb, label %return
83 bb:                                               ; preds = %entry
84   %3 = tail call i32 (...) @foo() nounwind       ; <i32> [#uses=0]
85   ret i32 undef
87 return:                                           ; preds = %entry
88   ret i32 undef