[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / peephole-fold-testrr.mir
blob08e7c8bda047bc00d4499da4380ac6d0ea75c4fe
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -run-pass=peephole-opt -mtriple=x86_64-- %s -o - | FileCheck %s
4 --- |
5   target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
6   target triple = "x86_64-unknown-linux-gnu"
8   define i32 @atomic(i8** %arg) {
9     %load = load atomic i8*, i8** %arg unordered, align 8
10     %cmp = icmp eq i8* %load, null
11     %zext = zext i1 %cmp to i32
12     ret i32 %zext
13   }
15   define i32 @nonatomic_unoptimized(i8** %arg) {
16     %load = load i8*, i8** %arg, align 8
17     %cmp = icmp eq i8* %load, null
18     %zext = zext i1 %cmp to i32
19     ret i32 %zext
20   }
22 ...
23 ---
24 name:            atomic
25 alignment:       16
26 tracksRegLiveness: true
27 registers:
28   - { id: 0, class: gr64 }
29   - { id: 1, class: gr64 }
30   - { id: 2, class: gr8 }
31   - { id: 3, class: gr32 }
32 liveins:
33   - { reg: '$rdi', virtual-reg: '%0' }
34 machineFunctionInfo: {}
35 body:             |
36   bb.0 (%ir-block.0):
37     liveins: $rdi
39     ; CHECK-LABEL: name: atomic
40     ; CHECK: liveins: $rdi
41     ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
42     ; CHECK: CMP64mi8 [[COPY]], 1, $noreg, 0, $noreg, 0, implicit-def $eflags :: (load unordered 8 from %ir.arg)
43     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 4, implicit $eflags
44     ; CHECK: [[MOVZX32rr8_:%[0-9]+]]:gr32 = MOVZX32rr8 killed [[SETCCr]]
45     ; CHECK: $eax = COPY [[MOVZX32rr8_]]
46     ; CHECK: RET 0, $eax
47     %0:gr64 = COPY $rdi
48     %1:gr64 = MOV64rm %0, 1, $noreg, 0, $noreg :: (load unordered 8 from %ir.arg)
49     TEST64rr %1, %1, implicit-def $eflags
50     %2:gr8 = SETCCr 4, implicit $eflags
51     %3:gr32 = MOVZX32rr8 killed %2
52     $eax = COPY %3
53     RET 0, $eax
55 ...
56 ---
57 name:            nonatomic_unoptimized
58 alignment:       16
59 tracksRegLiveness: true
60 registers:
61   - { id: 0, class: gr64 }
62   - { id: 1, class: gr64 }
63   - { id: 2, class: gr8 }
64   - { id: 3, class: gr32 }
65 liveins:
66   - { reg: '$rdi', virtual-reg: '%0' }
67 machineFunctionInfo: {}
68 body:             |
69   bb.0 (%ir-block.0):
70     liveins: $rdi
72     ; CHECK-LABEL: name: nonatomic_unoptimized
73     ; CHECK: liveins: $rdi
74     ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rdi
75     ; CHECK: CMP64mi8 [[COPY]], 1, $noreg, 0, $noreg, 0, implicit-def $eflags :: (load 8 from %ir.arg)
76     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 4, implicit $eflags
77     ; CHECK: [[MOVZX32rr8_:%[0-9]+]]:gr32 = MOVZX32rr8 killed [[SETCCr]]
78     ; CHECK: $eax = COPY [[MOVZX32rr8_]]
79     ; CHECK: RET 0, $eax
80     %0:gr64 = COPY $rdi
81     %1:gr64 = MOV64rm %0, 1, $noreg, 0, $noreg :: (load 8 from %ir.arg)
82     TEST64rr %1, %1, implicit-def $eflags
83     %2:gr8 = SETCCr 4, implicit $eflags
84     %3:gr32 = MOVZX32rr8 killed %2
85     $eax = COPY %3
86     RET 0, $eax
88 ...