reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    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
; RUN: llc -march=hexagon -filetype=obj -o /dev/null < %s
; REQUIRES: asserts

; This crashed in the MC code emitter, because a new-value branch was created
; with IMPLICIT_DEF as the producer.

target triple = "hexagon"

%type.0 = type { %type.1, [64 x i8] }
%type.1 = type { [12 x i8], %type.2*, double }
%type.2 = type { i16, i16, [1 x %type.3] }
%type.3 = type { i32 }
%type.4 = type { %type.2*, i32 }

define hidden fastcc i8* @fred(%type.0* nocapture readonly %a0, i8* readonly %a1) unnamed_addr #2 {
b2:
  %v3 = load i8, i8* %a1, align 1
  br i1 undef, label %b4, label %b24

b4:                                               ; preds = %b2
  switch i8 %v3, label %b13 [
    i8 25, label %b5
    i8 26, label %b6
    i8 28, label %b8
    i8 27, label %b9
    i8 43, label %b11
    i8 110, label %b12
  ]

b5:                                               ; preds = %b4
  unreachable

b6:                                               ; preds = %b4
  %v7 = getelementptr inbounds i8, i8* %a1, i32 2
  br label %b16

b8:                                               ; preds = %b4
  br label %b16

b9:                                               ; preds = %b4
  %v10 = tail call fastcc i8* @fred(%type.0* undef, i8* undef)
  br label %b24

b11:                                              ; preds = %b4
  unreachable

b12:                                              ; preds = %b4
  unreachable

b13:                                              ; preds = %b4
  br label %b14

b14:                                              ; preds = %b13
  br i1 undef, label %b15, label %b16

b15:                                              ; preds = %b14
  unreachable

b16:                                              ; preds = %b20, %b14, %b8, %b6
  %v17 = phi i8* [ %v21, %b20 ], [ undef, %b14 ], [ undef, %b8 ], [ %v7, %b6 ]
  %v18 = phi i32 [ 0, %b20 ], [ undef, %b14 ], [ 0, %b8 ], [ 8, %b6 ]
  %v19 = icmp sgt i32 %v18, 0
  br i1 %v19, label %b20, label %b24

b20:                                              ; preds = %b16
  %v21 = getelementptr inbounds i8, i8* %v17, i32 1
  %v22 = load i8, i8* %v17, align 1
  %v23 = icmp eq i8 %v22, undef
  br i1 %v23, label %b16, label %b24

b24:                                              ; preds = %b20, %b16, %b9, %b2
  %v25 = phi i8* [ null, %b2 ], [ null, %b9 ], [ %v17, %b16 ], [ null, %b20 ]
  ret i8* %v25
}

attributes #0 = { argmemonly nounwind }
attributes #1 = { nounwind readonly "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-length64b,-long-calls" }
attributes #2 = { nounwind "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-length64b,-long-calls" }