xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/3addr-16bit.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -asm-verbose=false | FileCheck %s -check-prefix=64BIT
2*9880d681SAndroid Build Coastguard Worker; rdar://7329206
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; In 32-bit the partial register stall would degrade performance.
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @t1(i16 zeroext %c, i16 zeroext %k) nounwind ssp {
7*9880d681SAndroid Build Coastguard Workerentry:
8*9880d681SAndroid Build Coastguard Worker; 32BIT-LABEL:     t1:
9*9880d681SAndroid Build Coastguard Worker; 32BIT:     movw 20(%esp), %ax
10*9880d681SAndroid Build Coastguard Worker; 32BIT-NOT: movw %ax, %cx
11*9880d681SAndroid Build Coastguard Worker; 32BIT:     leal 1(%eax), %ecx
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; 64BIT-LABEL:     t1:
14*9880d681SAndroid Build Coastguard Worker; 64BIT-NOT: movw %si, %ax
15*9880d681SAndroid Build Coastguard Worker; 64BIT:     movl %esi, %eax
16*9880d681SAndroid Build Coastguard Worker  %0 = icmp eq i16 %k, %c                         ; <i1> [#uses=1]
17*9880d681SAndroid Build Coastguard Worker  %1 = add i16 %k, 1                              ; <i16> [#uses=3]
18*9880d681SAndroid Build Coastguard Worker  br i1 %0, label %bb, label %bb1
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerbb:                                               ; preds = %entry
21*9880d681SAndroid Build Coastguard Worker  tail call void @foo(i16 zeroext %1) nounwind
22*9880d681SAndroid Build Coastguard Worker  ret i16 %1
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerbb1:                                              ; preds = %entry
25*9880d681SAndroid Build Coastguard Worker  ret i16 %1
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @t2(i16 zeroext %c, i16 zeroext %k) nounwind ssp {
29*9880d681SAndroid Build Coastguard Workerentry:
30*9880d681SAndroid Build Coastguard Worker; 32BIT-LABEL:     t2:
31*9880d681SAndroid Build Coastguard Worker; 32BIT:     movw 20(%esp), %ax
32*9880d681SAndroid Build Coastguard Worker; 32BIT-NOT: movw %ax, %cx
33*9880d681SAndroid Build Coastguard Worker; 32BIT:     leal -1(%eax), %ecx
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker; 64BIT-LABEL:     t2:
36*9880d681SAndroid Build Coastguard Worker; 64BIT-NOT: movw %si, %ax
37*9880d681SAndroid Build Coastguard Worker; 64BIT:     movl %esi, %eax
38*9880d681SAndroid Build Coastguard Worker; 64BIT:     movzwl %ax
39*9880d681SAndroid Build Coastguard Worker  %0 = icmp eq i16 %k, %c                         ; <i1> [#uses=1]
40*9880d681SAndroid Build Coastguard Worker  %1 = add i16 %k, -1                             ; <i16> [#uses=3]
41*9880d681SAndroid Build Coastguard Worker  br i1 %0, label %bb, label %bb1
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerbb:                                               ; preds = %entry
44*9880d681SAndroid Build Coastguard Worker  tail call void @foo(i16 zeroext %1) nounwind
45*9880d681SAndroid Build Coastguard Worker  ret i16 %1
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerbb1:                                              ; preds = %entry
48*9880d681SAndroid Build Coastguard Worker  ret i16 %1
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdeclare void @foo(i16 zeroext)
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @t3(i16 zeroext %c, i16 zeroext %k) nounwind ssp {
54*9880d681SAndroid Build Coastguard Workerentry:
55*9880d681SAndroid Build Coastguard Worker; 32BIT-LABEL:     t3:
56*9880d681SAndroid Build Coastguard Worker; 32BIT:     movw 20(%esp), %ax
57*9880d681SAndroid Build Coastguard Worker; 32BIT-NOT: movw %ax, %cx
58*9880d681SAndroid Build Coastguard Worker; 32BIT:     leal 2(%eax), %ecx
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; 64BIT-LABEL:     t3:
61*9880d681SAndroid Build Coastguard Worker; 64BIT-NOT: movw %si, %ax
62*9880d681SAndroid Build Coastguard Worker; 64BIT:     movl %esi, %eax
63*9880d681SAndroid Build Coastguard Worker  %0 = add i16 %k, 2                              ; <i16> [#uses=3]
64*9880d681SAndroid Build Coastguard Worker  %1 = icmp eq i16 %k, %c                         ; <i1> [#uses=1]
65*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %bb, label %bb1
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerbb:                                               ; preds = %entry
68*9880d681SAndroid Build Coastguard Worker  tail call void @foo(i16 zeroext %0) nounwind
69*9880d681SAndroid Build Coastguard Worker  ret i16 %0
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Workerbb1:                                              ; preds = %entry
72*9880d681SAndroid Build Coastguard Worker  ret i16 %0
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @t4(i16 zeroext %c, i16 zeroext %k) nounwind ssp {
76*9880d681SAndroid Build Coastguard Workerentry:
77*9880d681SAndroid Build Coastguard Worker; 32BIT-LABEL:     t4:
78*9880d681SAndroid Build Coastguard Worker; 32BIT:     movw 16(%esp), %ax
79*9880d681SAndroid Build Coastguard Worker; 32BIT:     movw 20(%esp), %cx
80*9880d681SAndroid Build Coastguard Worker; 32BIT-NOT: movw %cx, %dx
81*9880d681SAndroid Build Coastguard Worker; 32BIT:     leal (%ecx,%eax), %edx
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker; 64BIT-LABEL:     t4:
84*9880d681SAndroid Build Coastguard Worker; 64BIT-NOT: movw %si, %ax
85*9880d681SAndroid Build Coastguard Worker; 64BIT:     movl %esi, %eax
86*9880d681SAndroid Build Coastguard Worker  %0 = add i16 %k, %c                             ; <i16> [#uses=3]
87*9880d681SAndroid Build Coastguard Worker  %1 = icmp eq i16 %k, %c                         ; <i1> [#uses=1]
88*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %bb, label %bb1
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Workerbb:                                               ; preds = %entry
91*9880d681SAndroid Build Coastguard Worker  tail call void @foo(i16 zeroext %0) nounwind
92*9880d681SAndroid Build Coastguard Worker  ret i16 %0
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workerbb1:                                              ; preds = %entry
95*9880d681SAndroid Build Coastguard Worker  ret i16 %0
96*9880d681SAndroid Build Coastguard Worker}
97