xref: /aosp_15_r20/external/llvm/test/CodeGen/MIR/X86/implicit-register-flag.mir (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker# RUN: llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o - %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker# This test ensures that the MIR parser parses the 'implicit' and 'implicit-def'
3*9880d681SAndroid Build Coastguard Worker# register flags correctly.
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker--- |
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker  define i32 @foo(i32 %a) {
8*9880d681SAndroid Build Coastguard Worker  entry:
9*9880d681SAndroid Build Coastguard Worker    %0 = icmp sle i32 %a, 10
10*9880d681SAndroid Build Coastguard Worker    br i1 %0, label %less, label %exit
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker  less:
13*9880d681SAndroid Build Coastguard Worker    ret i32 0
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker  exit:
16*9880d681SAndroid Build Coastguard Worker    ret i32 %a
17*9880d681SAndroid Build Coastguard Worker  }
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker  define i1 @implicit_subregister1() {
20*9880d681SAndroid Build Coastguard Worker  entry:
21*9880d681SAndroid Build Coastguard Worker    ret i1 false
22*9880d681SAndroid Build Coastguard Worker  }
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker  define i16 @implicit_subregister2() {
25*9880d681SAndroid Build Coastguard Worker  entry:
26*9880d681SAndroid Build Coastguard Worker    ret i16 0
27*9880d681SAndroid Build Coastguard Worker  }
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker...
30*9880d681SAndroid Build Coastguard Worker---
31*9880d681SAndroid Build Coastguard Workername:            foo
32*9880d681SAndroid Build Coastguard Workerbody: |
33*9880d681SAndroid Build Coastguard Worker  bb.0.entry:
34*9880d681SAndroid Build Coastguard Worker    successors: %bb.1.less, %bb.2.exit
35*9880d681SAndroid Build Coastguard Worker    ; CHECK:      CMP32ri8 %edi, 10, implicit-def %eflags
36*9880d681SAndroid Build Coastguard Worker    ; CHECK-NEXT: JG_1 %bb.2.exit, implicit %eflags
37*9880d681SAndroid Build Coastguard Worker    CMP32ri8 %edi, 10, implicit-def %eflags
38*9880d681SAndroid Build Coastguard Worker    JG_1 %bb.2.exit, implicit %eflags
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker  bb.1.less:
41*9880d681SAndroid Build Coastguard Worker    ; CHECK: %eax = MOV32r0 implicit-def %eflags
42*9880d681SAndroid Build Coastguard Worker    %eax = MOV32r0 implicit-def %eflags
43*9880d681SAndroid Build Coastguard Worker    RETQ %eax
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker  bb.2.exit:
46*9880d681SAndroid Build Coastguard Worker    %eax = COPY %edi
47*9880d681SAndroid Build Coastguard Worker    RETQ %eax
48*9880d681SAndroid Build Coastguard Worker...
49*9880d681SAndroid Build Coastguard Worker---
50*9880d681SAndroid Build Coastguard Workername:            implicit_subregister1
51*9880d681SAndroid Build Coastguard Workerbody: |
52*9880d681SAndroid Build Coastguard Worker  bb.0.entry:
53*9880d681SAndroid Build Coastguard Worker  ; Verify that the implicit register verifier won't report an error on implicit
54*9880d681SAndroid Build Coastguard Worker  ; subregisters.
55*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: name: implicit_subregister1
56*9880d681SAndroid Build Coastguard Worker  ; CHECK: dead %eax = XOR32rr undef %eax, undef %eax, implicit-def dead %eflags, implicit-def %al
57*9880d681SAndroid Build Coastguard Worker    dead %eax = XOR32rr undef %eax, undef %eax, implicit-def dead %eflags, implicit-def %al
58*9880d681SAndroid Build Coastguard Worker    RETQ killed %al
59*9880d681SAndroid Build Coastguard Worker...
60*9880d681SAndroid Build Coastguard Worker---
61*9880d681SAndroid Build Coastguard Workername:            implicit_subregister2
62*9880d681SAndroid Build Coastguard Workerbody: |
63*9880d681SAndroid Build Coastguard Worker  bb.0.entry:
64*9880d681SAndroid Build Coastguard Worker  ; CHECK-LABEL: name: implicit_subregister2
65*9880d681SAndroid Build Coastguard Worker  ; CHECK: dead %r15 = XOR64rr undef %r15, undef %r15, implicit-def dead %eflags, implicit-def %r15w
66*9880d681SAndroid Build Coastguard Worker    dead %r15 = XOR64rr undef %r15, undef %r15, implicit-def dead %eflags, implicit-def %r15w
67*9880d681SAndroid Build Coastguard Worker    RETQ killed %r15w
68*9880d681SAndroid Build Coastguard Worker...
69