xref: /llvm-project/llvm/test/CodeGen/Lanai/masking_setccs.ll (revision 0dbcc34f6b14a110314078098d01489db04d140b)
1*0dbcc34fSJacques Pienaar; RUN: llc < %s | FileCheck %s
2*0dbcc34fSJacques Pienaar
3*0dbcc34fSJacques Pienaar; Test that unnecessary masking with 0x1 is not inserted.
4*0dbcc34fSJacques Pienaar
5*0dbcc34fSJacques Pienaartarget datalayout = "E-m:e-p:32:32-i64:64-a:0:32-n32-S64"
6*0dbcc34fSJacques Pienaartarget triple = "lanai"
7*0dbcc34fSJacques Pienaar
8*0dbcc34fSJacques Pienaar; CHECK-LABEL: masking:
9*0dbcc34fSJacques Pienaar; CHECK-NOT: mov 1
10*0dbcc34fSJacques Pienaardefine i32 @masking(i32 inreg %a, i32 inreg %b, i32 inreg %c, i32 inreg %d) {
11*0dbcc34fSJacques Pienaarentry:
12*0dbcc34fSJacques Pienaar  %cmp = icmp ne i32 %a, 0
13*0dbcc34fSJacques Pienaar  %cmp1 = icmp ult i32 %a, %b
14*0dbcc34fSJacques Pienaar  %or.cond = and i1 %cmp, %cmp1
15*0dbcc34fSJacques Pienaar  br i1 %or.cond, label %return, label %if.end
16*0dbcc34fSJacques Pienaar
17*0dbcc34fSJacques Pienaarif.end:                                           ; preds = %entry
18*0dbcc34fSJacques Pienaar  %cmp2 = icmp ne i32 %b, 0
19*0dbcc34fSJacques Pienaar  %cmp4 = icmp ult i32 %b, %c
20*0dbcc34fSJacques Pienaar  %or.cond29 = and i1 %cmp2, %cmp4
21*0dbcc34fSJacques Pienaar  br i1 %or.cond29, label %return, label %if.end6
22*0dbcc34fSJacques Pienaar
23*0dbcc34fSJacques Pienaarif.end6:                                          ; preds = %if.end
24*0dbcc34fSJacques Pienaar  %cmp7 = icmp ne i32 %c, 0
25*0dbcc34fSJacques Pienaar  %cmp9 = icmp ult i32 %c, %d
26*0dbcc34fSJacques Pienaar  %or.cond30 = and i1 %cmp7, %cmp9
27*0dbcc34fSJacques Pienaar  br i1 %or.cond30, label %return, label %if.end11
28*0dbcc34fSJacques Pienaar
29*0dbcc34fSJacques Pienaarif.end11:                                         ; preds = %if.end6
30*0dbcc34fSJacques Pienaar  %cmp12 = icmp ne i32 %d, 0
31*0dbcc34fSJacques Pienaar  %cmp14 = icmp ult i32 %d, %a
32*0dbcc34fSJacques Pienaar  %or.cond31 = and i1 %cmp12, %cmp14
33*0dbcc34fSJacques Pienaar  %b. = select i1 %or.cond31, i32 %b, i32 21
34*0dbcc34fSJacques Pienaar  ret i32 %b.
35*0dbcc34fSJacques Pienaar
36*0dbcc34fSJacques Pienaarreturn:                                           ; preds = %if.end6, %if.end, %entry
37*0dbcc34fSJacques Pienaar  %retval.0 = phi i32 [ %c, %entry ], [ %d, %if.end ], [ %a, %if.end6 ]
38*0dbcc34fSJacques Pienaar  ret i32 %retval.0
39*0dbcc34fSJacques Pienaar}
40*0dbcc34fSJacques Pienaar
41*0dbcc34fSJacques Pienaar; CHECK-LABEL: notnot:
42*0dbcc34fSJacques Pienaar; CHECK-NOT: mov 1
43*0dbcc34fSJacques Pienaardefine i32 @notnot(i32 %x) {
44*0dbcc34fSJacques Pienaarentry:
45*0dbcc34fSJacques Pienaar  %tobool = icmp ne i32 %x, 0
46*0dbcc34fSJacques Pienaar  %lnot.ext = zext i1 %tobool to i32
47*0dbcc34fSJacques Pienaar  ret i32 %lnot.ext
48*0dbcc34fSJacques Pienaar}
49