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 133 134 135 136
|
; RUN: llc -verify-machineinstrs < %s
; PR30911
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "armv6kz--linux-gnueabihf"
; Function Attrs: nounwind
define void @dradbg(i32, i32, ptr, ptr, ptr, ptr, ptr) #0 {
br i1 undef, label %.critedge, label %8
.critedge: ; preds = %7
%.mux2 = select i1 undef, i1 undef, i1 true
br label %8
; <label>:8: ; preds = %.critedge, %7
%9 = getelementptr float, ptr %3, i64 undef
%10 = ptrtoint ptr %9 to i32
%11 = icmp ule i32 %10, undef
%12 = getelementptr float, ptr %5, i64 undef
%13 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 undef, i64 undef)
%14 = extractvalue { i64, i1 } %13, 0
%15 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %14, i64 1)
%16 = extractvalue { i64, i1 } %15, 0
%17 = icmp slt i64 1, %16
%18 = select i1 %17, i64 1, i64 %16
%19 = sext i32 %1 to i64
%20 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %18, i64 %19)
%21 = extractvalue { i64, i1 } %20, 0
%22 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %21, i64 0)
%23 = extractvalue { i64, i1 } %22, 0
%24 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %23, i64 undef)
%25 = extractvalue { i64, i1 } %24, 0
%26 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %25, i64 0)
%27 = extractvalue { i64, i1 } %26, 0
%28 = getelementptr float, ptr %3, i64 %27
%29 = ptrtoint ptr %12 to i32
%30 = ptrtoint ptr %28 to i32
%31 = icmp ule i32 %29, %30
%32 = or i1 %11, %31
%33 = and i1 false, %32
%34 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 0, i64 undef)
%35 = extractvalue { i64, i1 } %34, 0
%36 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %35, i64 1)
%37 = extractvalue { i64, i1 } %36, 0
%38 = icmp slt i64 1, %37
%39 = select i1 %38, i64 1, i64 %37
%40 = sext i32 %1 to i64
%41 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %39, i64 %40)
%42 = extractvalue { i64, i1 } %41, 0
%43 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %42, i64 0)
%44 = extractvalue { i64, i1 } %43, 0
%45 = sext i32 %0 to i64
%46 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %44, i64 %45)
%47 = extractvalue { i64, i1 } %46, 0
%48 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %47, i64 0)
%49 = extractvalue { i64, i1 } %48, 0
%50 = getelementptr float, ptr %5, i64 %49
%51 = ptrtoint ptr %50 to i32
%52 = icmp ule i32 undef, %51
%53 = getelementptr float, ptr %4, i64 undef
%54 = ptrtoint ptr %53 to i32
%55 = icmp ule i32 undef, %54
%56 = or i1 %52, %55
%57 = and i1 %33, %56
%58 = getelementptr float, ptr %2, i64 undef
%59 = ptrtoint ptr %58 to i32
%60 = icmp ule i32 %59, undef
%61 = select i1 undef, i64 undef, i64 0
%62 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %61, i64 undef)
%63 = extractvalue { i64, i1 } %62, 0
%64 = call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 undef, i64 1)
%65 = extractvalue { i64, i1 } %64, 0
%66 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %63, i64 %65)
%67 = extractvalue { i64, i1 } %66, 0
%68 = sext i32 %0 to i64
%69 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %67, i64 %68)
%70 = extractvalue { i64, i1 } %69, 0
%71 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %70, i64 0)
%72 = extractvalue { i64, i1 } %71, 0
%73 = getelementptr float, ptr %5, i64 %72
%74 = ptrtoint ptr %73 to i32
%75 = icmp ule i32 %74, undef
%76 = or i1 %60, %75
%77 = and i1 %57, %76
%78 = getelementptr float, ptr %6, i64 undef
%79 = ptrtoint ptr %78 to i32
%80 = icmp ule i32 %79, undef
%81 = getelementptr float, ptr %5, i64 undef
%82 = ptrtoint ptr %81 to i32
%83 = icmp ule i32 %82, undef
%84 = or i1 %80, %83
%85 = and i1 %77, %84
%86 = and i1 %85, undef
%87 = and i1 %86, undef
%88 = and i1 %87, undef
%89 = and i1 %88, undef
%90 = and i1 %89, undef
%91 = and i1 %90, undef
%92 = and i1 %91, undef
%93 = and i1 %92, undef
%94 = and i1 %93, undef
%95 = and i1 %94, undef
br i1 %95, label %97, label %96
; <label>:96: ; preds = %8
br i1 undef, label %.critedge122, label %.critedge110
.critedge122: ; preds = %.critedge122, %96
br i1 false, label %.critedge122, label %.critedge110
.critedge110: ; preds = %.critedge219, %97, %.critedge122, %96
ret void
; <label>:97: ; preds = %8
br i1 undef, label %.critedge219, label %.critedge110
.critedge219: ; preds = %.critedge219, %97
%.pr287 = phi i1 [ undef, %.critedge219 ], [ true, %97 ]
br i1 %.pr287, label %.critedge219, label %.critedge110
}
; Function Attrs: nounwind readnone
declare { i64, i1 } @llvm.smul.with.overflow.i64(i64, i64) #1
; Function Attrs: nounwind readnone
declare { i64, i1 } @llvm.sadd.with.overflow.i64(i64, i64) #1
; Function Attrs: nounwind readnone
declare { i64, i1 } @llvm.ssub.with.overflow.i64(i64, i64) #1
attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "polly-optimized" "stack-protector-buffer-size"="8" "target-cpu"="arm1176jzf-s" "target-features"="+dsp,+strict-align,+vfp2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind readnone }
!llvm.ident = !{!0}
!0 = !{!"clang version 4.0.0 (trunk 285923) (llvm/trunk 285921)"}
|