summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/PowerPC/setcr_bc.mir
blob: 3ef87237b03753b1a73c4f09cd1d775d50db0b5c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# RUN: llc -verify-machineinstrs -start-before=ppc-pre-emit-peephole %s -o - | FileCheck %s
--- |
  target datalayout = "e-m:e-i64:64-n32:64"
  target triple = "powerpc64le-unknown-linux-gnu"
  
  declare signext i32 @callee(i32 signext) local_unnamed_addr #1

  define signext i32 @func(i32 signext %v) local_unnamed_addr #0 {
  entry:
    %call.i = tail call signext i32 @callee(i32 signext %v)
    %tobool.i = icmp eq i32 %call.i, 0
    br i1 %tobool.i, label %if.else.i, label %if.then.i
  
  if.then.i:                                        ; preds = %entry
    %call2.i = tail call signext i32 @callee(i32 signext %call.i)
    br label %_Z6calleei.exit
  
  if.else.i:                                        ; preds = %entry
    %phitmp = icmp sgt i32 %v, -1
    br label %_Z6calleei.exit
  
  _Z6calleei.exit:                                  ; preds = %if.else.i, %if.then.i
    %call2.i.sink = phi i32 [ %call2.i, %if.then.i ], [ %v, %if.else.i ]
    %.sink = phi i1 [ false, %if.then.i ], [ %phitmp, %if.else.i ]
    br i1 %.sink, label %if.end, label %if.then
  
  if.then:                                          ; preds = %_Z6calleei.exit
    %call1 = tail call signext i32 @callee(i32 signext 0)
    br label %if.end
  
  if.end:                                           ; preds = %if.then, %_Z6calleei.exit
    ret i32 %call2.i.sink
  }
  
  attributes #0 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="ppc64le" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+vsx,-power9-vector,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
  attributes #1 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="ppc64le" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+vsx,-power9-vector,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }

...
---
name:            func
alignment:       16
exposesReturnsTwice: false
legalized:       false
regBankSelected: false
selected:        false
failedISel:      false
tracksRegLiveness: true
registers:       
liveins:         
  - { reg: '$x3', virtual-reg: '' }
frameInfo:       
  isFrameAddressTaken: false
  isReturnAddressTaken: false
  hasStackMap:     false
  hasPatchPoint:   false
  stackSize:       48
  offsetAdjustment: 0
  maxAlignment:    0
  adjustsStack:    true
  hasCalls:        true
  stackProtector:  ''
  maxCallFrameSize: 32
  hasOpaqueSPAdjustment: false
  hasVAStart:      false
  hasMustTailInVarArgFunc: false
  localFrameSize:  0
  savePoint:       ''
  restorePoint:    ''
fixedStack:      
  - { id: 0, type: spill-slot, offset: -16, size: 8, alignment: 16, stack-id: default,
      callee-saved-register: '$x30', callee-saved-restored: true, debug-info-variable: '', 
      debug-info-expression: '', debug-info-location: '' }
stack:           
constants:       

body:             |
  bb.0.entry:
    successors: %bb.2(0x30000000), %bb.1(0x50000000)
    liveins: $x3, $x30

    ; bc and crxor (CRUNSET) should be removed.
    ; CHECK-LABEL: func
    ; CHECK: # %bb.1
    ; CHECK-NOT: crxor
    ; CHECK-NOT: bc
    ; CHECK: .LBB0_2

    $x0 = MFLR8 implicit $lr8
    STD killed $x0, 16, $x1
    $x1 = STDU $x1, -48, $x1
    STD killed $x30, 32, $x1 :: (store 8 into %fixed-stack.0, align 16)
    $x30 = OR8 $x3, $x3
    BL8_NOP @callee, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit killed $x3, implicit $x2, implicit-def $r1, implicit-def $x3
    renamable $cr0 = CMPLWI renamable $r3, 0
    BCC 76, killed renamable $cr0, %bb.2
  
  bb.1.if.then.i:
    successors: %bb.5(0x40000000), %bb.4(0x40000000)
    liveins: $x3
  
    renamable $x3 = EXTSW_32_64 killed renamable $r3, implicit $x3
    BL8_NOP @callee, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit killed $x3, implicit $x2, implicit-def $r1, implicit-def $x3
    renamable $cr0gt = CRUNSET implicit-def $cr0
    $x30 = OR8 killed $x3, $x3
    BC killed renamable $cr0gt, %bb.5
  
  bb.4.if.then:
    successors: %bb.5(0x80000000)
    liveins: $x30
  
    $x3 = LI8 0
    BL8_NOP @callee, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit killed $x3, implicit $x2, implicit-def $r1, implicit-def dead $x3
  
  bb.5.if.end:
    liveins: $x30
  
    renamable $x3 = EXTSW_32_64 killed renamable $r30, implicit $x30
    $x30 = LD 32, $x1 :: (load 8 from %fixed-stack.0, align 16)
    $x1 = ADDI8 $x1, 48
    $x0 = LD 16, $x1
    MTLR8 killed $x0, implicit-def $lr8
    BLR8 implicit $lr8, implicit $rm, implicit killed $x3
  
  bb.2.if.else.i:
    successors: %bb.5(0x40000000), %bb.4(0x40000000)
    liveins: $x30
  
    renamable $cr0 = CMPWI renamable $r30, -1
    BCn killed renamable $cr0gt, %bb.4
    B %bb.5

...
OpenPOWER on IntegriCloud