1 ; RUN: llc -O2 -march=hexagon -mcpu=hexagonv62 < %s | FileCheck %s 2 ; CHECK: ParseFunc: 3 ; CHECK: r[[ARG0:[0-9]+]] = memuh(r[[ARG1:[0-9]+]]+#[[OFFSET:[0-9]+]]) 4 ; CHECK: memw(r[[ARG1]]+#[[OFFSET]]) = r[[ARG0]] 5 6 @.str.3 = external unnamed_addr constant [8 x i8], align 1 7 ; Function Attrs: nounwind 8 define void @ParseFunc() local_unnamed_addr #0 { 9 entry: 10 %dataVar = alloca i32, align 4 11 %0 = load i32, i32* %dataVar, align 4 12 %and = and i32 %0, 65535 13 store i32 %and, i32* %dataVar, align 4 14 %.pr = load i32, i32* %dataVar, align 4 15 switch i32 %.pr, label %sw.epilog [ 16 i32 4, label %sw.bb 17 i32 5, label %sw.bb 18 i32 1, label %sw.bb39 19 i32 2, label %sw.bb40 20 i32 3, label %sw.bb41 21 i32 6, label %sw.bb42 22 i32 7, label %sw.bb43 23 i32 13, label %sw.bb44 24 i32 0, label %sw.bb44 25 i32 14, label %sw.bb45 26 i32 15, label %sw.bb46 27 ] 28 29 sw.bb: 30 %cmp1.i = icmp eq i32 %.pr, 4 31 br label %land.rhs.i 32 33 land.rhs.i: 34 br label %ParseFuncNext.exit.i 35 36 ParseFuncNext.exit.i: 37 br i1 %cmp1.i, label %if.then.i, label %if.else10.i 38 39 if.then.i: 40 call void (i8*, i32, i8*, ...) @snprintf(i8* undef, i32 undef, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i32 0, i32 0), i32 undef) #2 41 br label %if.end27.i 42 43 if.else10.i: 44 unreachable 45 46 if.end27.i: 47 br label %land.rhs.i 48 49 sw.bb39: 50 unreachable 51 52 sw.bb40: 53 unreachable 54 55 sw.bb41: 56 unreachable 57 58 sw.bb42: 59 %1 = load i32, i32* undef, align 4 60 %shr.i = lshr i32 %1, 16 61 br label %while.cond.i.i 62 63 while.cond.i.i: 64 %2 = load i8, i8* undef, align 1 65 switch i8 %2, label %if.then4.i [ 66 i8 48, label %land.end.i.i 67 i8 120, label %land.end.i.i 68 i8 37, label %do.body.i.i 69 ] 70 71 land.end.i.i: 72 unreachable 73 74 do.body.i.i: 75 switch i8 undef, label %if.then4.i [ 76 i8 117, label %if.end40.i.i 77 i8 120, label %if.end40.i.i 78 i8 88, label %if.end40.i.i 79 i8 100, label %if.end40.i.i 80 i8 105, label %if.end40.i.i 81 ] 82 83 if.end40.i.i: 84 %trunc.i = trunc i32 %shr.i to i16 85 br label %land.rhs.i126 86 87 if.then4.i: 88 unreachable 89 90 land.rhs.i126: 91 switch i16 %trunc.i, label %sw.epilog.i [ 92 i16 1, label %sw.bb.i 93 i16 2, label %sw.bb12.i 94 i16 4, label %sw.bb16.i 95 ] 96 97 sw.bb.i: 98 unreachable 99 100 sw.bb12.i: 101 unreachable 102 103 sw.bb16.i: 104 unreachable 105 106 sw.epilog.i: 107 call void (i8*, i32, i8*, ...) @snprintf(i8* undef, i32 undef, i8* nonnull undef, i32 undef) #2 108 br label %land.rhs.i126 109 110 sw.bb43: 111 unreachable 112 113 sw.bb44: 114 unreachable 115 116 sw.bb45: 117 unreachable 118 119 sw.bb46: 120 unreachable 121 122 sw.epilog: 123 ret void 124 } 125 126 ; Function Attrs: nounwind 127 declare void @snprintf(i8* nocapture, i32, i8* nocapture readonly, ...) local_unnamed_addr #1 128 129 attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="hexagonv62" "target-features"="+hvx,+hvx-length64b" "unsafe-fp-math"="false" "use-soft-float"="false" } 130 attributes #1 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="hexagonv62" "target-features"="+hvx,+hvx-length64b" "unsafe-fp-math"="false" "use-soft-float"="false" } 131 attributes #2 = { nounwind } 132 133