File: livevars-crash1.mir

package info (click to toggle)
llvm-toolchain-19 1%3A19.1.7-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,998,520 kB
  • sloc: cpp: 6,951,680; ansic: 1,486,157; asm: 913,598; python: 232,024; f90: 80,126; objc: 75,281; lisp: 37,276; pascal: 16,990; sh: 10,009; ml: 5,058; perl: 4,724; awk: 3,523; makefile: 3,167; javascript: 2,504; xml: 892; fortran: 664; cs: 573
file content (130 lines) | stat: -rw-r--r-- 4,343 bytes parent folder | download | duplicates (3)
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
# RUN: llc -mtriple powerpc64le-unknown-linux-gnu %s -o - 2>&1 \
# RUN:   -run-pass=livevars,phi-node-elimination -verify-machineinstrs | \
# RUN:  FileCheck %s
# RUN: llc -mtriple powerpc64le-unknown-linux-gnu %s -o - 2>&1 \
# RUN:   --passes='require<live-vars>,phi-node-elimination' | \
# RUN:  FileCheck %s

--- |
  ; Function Attrs: noreturn nounwind
  define signext i32 @zext_free(ptr nocapture dereferenceable(8) %p) {
  entry:
    %.pre = load ptr, ptr %p, align 8
    br label %loop
  
  loop:                                             ; preds = %loop, %if.then3, %entry
    %0 = phi ptr [ %.pre, %entry ], [ %incdec.ptr4, %if.then3 ], [ %incdec.ptr, %loop ]
    %1 = load i8, ptr %0, align 1
    %tobool = icmp eq i8 %1, 0
    %incdec.ptr = getelementptr inbounds i8, ptr %0, i64 1
    store ptr %incdec.ptr, ptr %p, align 8
    %2 = load i8, ptr %incdec.ptr, align 1
    %tobool2 = icmp ne i8 %2, 0
    %or.cond = and i1 %tobool, %tobool2
    br i1 %or.cond, label %if.then3, label %loop
  
  if.then3:                                         ; preds = %loop
    %incdec.ptr4 = getelementptr inbounds i8, ptr %0, i64 2
    store ptr %incdec.ptr4, ptr %p, align 8
    br label %loop
  }
  

...
---
name:            zext_free
tracksRegLiveness: true
registers:
  - { id: 0, class: g8rc, preferred-register: '' }
  - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
  - { id: 2, class: g8rc, preferred-register: '' }
  - { id: 3, class: g8rc, preferred-register: '' }
  - { id: 4, class: g8rc_and_g8rc_nox0, preferred-register: '' }
  - { id: 5, class: gprc, preferred-register: '' }
  - { id: 6, class: crrc, preferred-register: '' }
  - { id: 7, class: crbitrc, preferred-register: '' }
  - { id: 8, class: gprc, preferred-register: '' }
  - { id: 9, class: crrc, preferred-register: '' }
  - { id: 10, class: crbitrc, preferred-register: '' }
  - { id: 11, class: crbitrc, preferred-register: '' }
liveins:
  - { reg: '$x3', virtual-reg: '%4' }
body:             |
  bb.0.entry:
    successors: %bb.1(0x80000000)
    liveins: $x3
  
    %4:g8rc_and_g8rc_nox0 = COPY killed $x3
    %0:g8rc = LD 0, %4 :: (dereferenceable load (s64) from %ir.p)
  
  bb.1.loop:
    successors: %bb.1(0x20000000), %bb.2(0x60000000)
  
    %1:g8rc_and_g8rc_nox0 = PHI %0, %bb.0, %2, %bb.1, %3, %bb.3, %2, %bb.2
    %5:gprc = LBZ 0, %1 :: (load (s8) from %ir.0)
    %6:crrc = CMPWI killed %5, 0
    %7:crbitrc = COPY killed %6.sub_eq
    %2:g8rc = nuw ADDI8 %1, 1
    STD %2, 0, %4 :: (store (s64) into %ir.p)
    %8:gprc = LBZ 1, %1 :: (load (s8) from %ir.incdec.ptr)
    BCn killed %7, %bb.1
    B %bb.2
  
  bb.2.loop:
    successors: %bb.3(0x55555555), %bb.1(0x2aaaaaab)
  
    %9:crrc = CMPWI killed %8, 0
    %10:crbitrc = COPY killed %9.sub_eq
    BC killed %10, %bb.1
    B %bb.3
  
  bb.3.if.then3:
    successors: %bb.1(0x80000000)
  
    %3:g8rc = nuw ADDI8 killed %1, 2
    STD %3, 0, %4 :: (store (s64) into %ir.p)
    B %bb.1

  ; CHECK-LABEL: name: zext_free
  ; CHECK: bb.0.entry:
  ; CHECK:   successors: %bb.1(0x80000000)
  ; CHECK:   liveins: $x3

  ; CHECK:   %4:g8rc_and_g8rc_nox0 = COPY killed $x3
  ; CHECK:   %0:g8rc = LD 0, %4 :: (dereferenceable load (s64) from %ir.p)
  ; CHECK:    %12:g8rc_and_g8rc_nox0 = COPY killed %0

  ; CHECK: bb.1.loop:
  ; CHECK:   successors: %bb.1(0x20000000), %bb.2(0x60000000)

  ; CHECK:   %1:g8rc_and_g8rc_nox0 = COPY killed %12
  ; CHECK:   %5:gprc = LBZ 0, %1 :: (load (s8) from %ir.0)
  ; CHECK:   %6:crrc = CMPWI killed %5, 0
  ; CHEXK:   %7:crbitrc = COPY killed %6.sub_eq
  ; CHECK:   %2:g8rc = nuw ADDI8 %1, 1
  ; CHECK:   STD %2, 0, %4 :: (store (s64) into %ir.p)
  ; CHECK:   %8:gprc = LBZ 1, %1 :: (load (s8) from %ir.incdec.ptr)
  ; CHECK:   %12:g8rc_and_g8rc_nox0 = COPY %2
  ; CHECK:   BCn killed %7, %bb.1
  ; CHECK:   B %bb.2

  ; CHECK: bb.2.loop:
  ; CHECK:   successors: %bb.3(0x55555555), %bb.1(0x2aaaaaab)

  ; CHECK:   %9:crrc = CMPWI killed %8, 0
  ; CHECK:   %10:crbitrc = COPY killed %9.sub_eq
  ; CHECK:   %12:g8rc_and_g8rc_nox0 = COPY killed %2
  ; CHECK:   BC killed %10, %bb.1
  ; CHECK:   B %bb.3

  ; CHECK: bb.3.if.then3:
  ; CHECK:   successors: %bb.1(0x80000000)

  ; CHECK:   %3:g8rc = nuw ADDI8 killed %1, 2
  ; CHECK:   STD %3, 0, %4 :: (store (s64) into %ir.p)
  ; CHECK:   %12:g8rc_and_g8rc_nox0 = COPY killed %3
  ; CHECK:   B %bb.1


...