xref: /llvm-project/llvm/test/CodeGen/PowerPC/i1-ext-fold.ll (revision 8e901c255df45e38cb1d69a576804029e20868bf)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2; RUN: llc -verify-machineinstrs -mcpu=pwr7 < %s | FileCheck %s
3; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-isel < %s | FileCheck --check-prefix=CHECK-NO-ISEL %s
4target datalayout = "E-m:e-i64:64-n32:64"
5target triple = "powerpc64-unknown-linux-gnu"
6
7; Function Attrs: nounwind readnone
8define signext i32 @foo(i32 signext %a, i32 signext %b) #0 {
9; CHECK-LABEL: foo:
10; CHECK:       # %bb.0: # %entry
11; CHECK-NEXT:    cmpw 3, 4
12; CHECK-NEXT:    li 3, 0
13; CHECK-NEXT:    li 4, 16
14; CHECK-NEXT:    isellt 3, 4, 3
15; CHECK-NEXT:    blr
16;
17; CHECK-NO-ISEL-LABEL: foo:
18; CHECK-NO-ISEL:       # %bb.0: # %entry
19; CHECK-NO-ISEL-NEXT:    cmpw 3, 4
20; CHECK-NO-ISEL-NEXT:    li 3, 16
21; CHECK-NO-ISEL-NEXT:    bclr 12, 0, 0
22; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry
23; CHECK-NO-ISEL-NEXT:    li 3, 0
24; CHECK-NO-ISEL-NEXT:    blr
25entry:
26  %cmp = icmp slt i32 %a, %b
27  %conv = zext i1 %cmp to i32
28  %shl = shl nuw nsw i32 %conv, 4
29  ret i32 %shl
30
31
32}
33
34; Function Attrs: nounwind readnone
35define signext i32 @foo2(i32 signext %a, i32 signext %b) #0 {
36; CHECK-LABEL: foo2:
37; CHECK:       # %bb.0: # %entry
38; CHECK-NEXT:    cmpw 3, 4
39; CHECK-NEXT:    li 3, 5
40; CHECK-NEXT:    li 4, 21
41; CHECK-NEXT:    isellt 3, 4, 3
42; CHECK-NEXT:    blr
43;
44; CHECK-NO-ISEL-LABEL: foo2:
45; CHECK-NO-ISEL:       # %bb.0: # %entry
46; CHECK-NO-ISEL-NEXT:    cmpw 3, 4
47; CHECK-NO-ISEL-NEXT:    li 3, 21
48; CHECK-NO-ISEL-NEXT:    bclr 12, 0, 0
49; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry
50; CHECK-NO-ISEL-NEXT:    li 3, 5
51; CHECK-NO-ISEL-NEXT:    blr
52entry:
53  %cmp = icmp slt i32 %a, %b
54  %conv = zext i1 %cmp to i32
55  %shl = shl nuw nsw i32 %conv, 4
56  %add1 = or i32 %shl, 5
57  ret i32 %add1
58
59
60}
61
62; Function Attrs: nounwind readnone
63define signext i32 @foo3(i32 signext %a, i32 signext %b) #0 {
64; CHECK-LABEL: foo3:
65; CHECK:       # %bb.0: # %entry
66; CHECK-NEXT:    cmpw 3, 4
67; CHECK-NEXT:    li 3, 16
68; CHECK-NEXT:    iselgt 3, 0, 3
69; CHECK-NEXT:    blr
70;
71; CHECK-NO-ISEL-LABEL: foo3:
72; CHECK-NO-ISEL:       # %bb.0: # %entry
73; CHECK-NO-ISEL-NEXT:    cmpw 3, 4
74; CHECK-NO-ISEL-NEXT:    li 3, 0
75; CHECK-NO-ISEL-NEXT:    bclr 12, 1, 0
76; CHECK-NO-ISEL-NEXT:  # %bb.1: # %entry
77; CHECK-NO-ISEL-NEXT:    li 3, 16
78; CHECK-NO-ISEL-NEXT:    blr
79entry:
80  %cmp = icmp sle i32 %a, %b
81  %conv = zext i1 %cmp to i32
82  %shl = shl nuw nsw i32 %conv, 4
83  ret i32 %shl
84
85
86}
87
88attributes #0 = { nounwind readnone }
89
90