1; RUN: llc -march=hexagon < %s | FileCheck %s 2 3@d = external global <16 x i32> 4@c = external global <32 x i32> 5 6; CHECK-LABEL: test1: 7; CHECK: v{{[0-9]+}}.b = vpacke(v{{[0-9]+}}.h,v{{[0-9]+}}.h) 8define void @test1(<16 x i32> %a, <16 x i32> %b) #0 { 9entry: 10 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackeb(<16 x i32> %a, <16 x i32> %b) 11 store <16 x i32> %0, <16 x i32>* @d, align 64 12 ret void 13} 14 15; CHECK-LABEL: test2: 16; CHECK: v{{[0-9]+}}.h = vpacke(v{{[0-9]+}}.w,v{{[0-9]+}}.w) 17define void @test2(<16 x i32> %a, <16 x i32> %b) #0 { 18entry: 19 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackeh(<16 x i32> %a, <16 x i32> %b) 20 store <16 x i32> %0, <16 x i32>* @d, align 64 21 ret void 22} 23 24; CHECK-LABEL: test3: 25; CHECK: v{{[0-9]+}}.ub = vpack(v{{[0-9]+}}.h,v{{[0-9]+}}.h):sat 26define void @test3(<16 x i32> %a, <16 x i32> %b) #0 { 27entry: 28 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackhub.sat(<16 x i32> %a, <16 x i32> %b) 29 store <16 x i32> %0, <16 x i32>* @d, align 64 30 ret void 31} 32 33; CHECK-LABEL: test4: 34; CHECK: v{{[0-9]+}}.b = vpack(v{{[0-9]+}}.h,v{{[0-9]+}}.h):sat 35define void @test4(<16 x i32> %a, <16 x i32> %b) #0 { 36entry: 37 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackhb.sat(<16 x i32> %a, <16 x i32> %b) 38 store <16 x i32> %0, <16 x i32>* @d, align 64 39 ret void 40} 41 42; CHECK-LABEL: test5: 43; CHECK: v{{[0-9]+}}.uh = vpack(v{{[0-9]+}}.w,v{{[0-9]+}}.w):sat 44define void @test5(<16 x i32> %a, <16 x i32> %b) #0 { 45entry: 46 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackwuh.sat(<16 x i32> %a, <16 x i32> %b) 47 store <16 x i32> %0, <16 x i32>* @d, align 64 48 ret void 49} 50 51; CHECK-LABEL: test6: 52; CHECK: v{{[0-9]+}}.h = vpack(v{{[0-9]+}}.w,v{{[0-9]+}}.w):sat 53define void @test6(<16 x i32> %a, <16 x i32> %b) #0 { 54entry: 55 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackwh.sat(<16 x i32> %a, <16 x i32> %b) 56 store <16 x i32> %0, <16 x i32>* @d, align 64 57 ret void 58} 59 60; CHECK-LABEL: test7: 61; CHECK: v{{[0-9]+}}.b = vpacko(v{{[0-9]+}}.h,v{{[0-9]+}}.h) 62define void @test7(<16 x i32> %a, <16 x i32> %b) #0 { 63entry: 64 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackob(<16 x i32> %a, <16 x i32> %b) 65 store <16 x i32> %0, <16 x i32>* @d, align 64 66 ret void 67} 68 69; CHECK-LABEL: test8: 70; CHECK: v{{[0-9]+}}.h = vpacko(v{{[0-9]+}}.w,v{{[0-9]+}}.w) 71define void @test8(<16 x i32> %a, <16 x i32> %b) #0 { 72entry: 73 %0 = tail call <16 x i32> @llvm.hexagon.V6.vpackoh(<16 x i32> %a, <16 x i32> %b) 74 store <16 x i32> %0, <16 x i32>* @d, align 64 75 ret void 76} 77 78; CHECK-LABEL: test9: 79; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh = vunpack(v{{[0-9]+}}.ub) 80define void @test9(<16 x i32> %a) #0 { 81entry: 82 %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackub(<16 x i32> %a) 83 store <32 x i32> %0, <32 x i32>* @c, align 128 84 ret void 85} 86 87; CHECK-LABEL: test10: 88; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw = vunpack(v{{[0-9]+}}.uh) 89define void @test10(<16 x i32> %a) #0 { 90entry: 91 %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackuh(<16 x i32> %a) 92 store <32 x i32> %0, <32 x i32>* @c, align 128 93 ret void 94} 95 96; CHECK-LABEL: test11: 97; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vunpack(v{{[0-9]+}}.b) 98define void @test11(<16 x i32> %a) #0 { 99entry: 100 %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackb(<16 x i32> %a) 101 store <32 x i32> %0, <32 x i32>* @c, align 128 102 ret void 103} 104 105; CHECK-LABEL: test12: 106; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vunpack(v{{[0-9]+}}.h) 107define void @test12(<16 x i32> %a) #0 { 108entry: 109 %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackh(<16 x i32> %a) 110 store <32 x i32> %0, <32 x i32>* @c, align 128 111 ret void 112} 113 114; CHECK-LABEL: test13: 115; CHECK: v{{[0-9]+}}.h = vdeal(v{{[0-9]+}}.h) 116define void @test13(<16 x i32> %a) #0 { 117entry: 118 %0 = tail call <16 x i32> @llvm.hexagon.V6.vdealh(<16 x i32> %a) 119 store <16 x i32> %0, <16 x i32>* @d, align 64 120 ret void 121} 122 123; CHECK-LABEL: test14: 124; CHECK: v{{[0-9]+}}.b = vdeal(v{{[0-9]+}}.b) 125define void @test14(<16 x i32> %a) #0 { 126entry: 127 %0 = tail call <16 x i32> @llvm.hexagon.V6.vdealb(<16 x i32> %a) 128 store <16 x i32> %0, <16 x i32>* @d, align 64 129 ret void 130} 131 132; CHECK-LABEL: test15: 133; CHECK: v{{[0-9]+}}.h = vshuff(v{{[0-9]+}}.h) 134define void @test15(<16 x i32> %a) #0 { 135entry: 136 %0 = tail call <16 x i32> @llvm.hexagon.V6.vshuffh(<16 x i32> %a) 137 store <16 x i32> %0, <16 x i32>* @d, align 64 138 ret void 139} 140 141; CHECK-LABEL: test16: 142; CHECK: v{{[0-9]+}}.b = vshuff(v{{[0-9]+}}.b) 143define void @test16(<16 x i32> %a) #0 { 144entry: 145 %0 = tail call <16 x i32> @llvm.hexagon.V6.vshuffb(<16 x i32> %a) 146 store <16 x i32> %0, <16 x i32>* @d, align 64 147 ret void 148} 149 150declare <16 x i32> @llvm.hexagon.V6.vpackeb(<16 x i32>, <16 x i32>) #0 151declare <16 x i32> @llvm.hexagon.V6.vpackeh(<16 x i32>, <16 x i32>) #0 152declare <16 x i32> @llvm.hexagon.V6.vpackhub.sat(<16 x i32>, <16 x i32>) #0 153declare <16 x i32> @llvm.hexagon.V6.vpackhb.sat(<16 x i32>, <16 x i32>) #0 154declare <16 x i32> @llvm.hexagon.V6.vpackwuh.sat(<16 x i32>, <16 x i32>) #0 155declare <16 x i32> @llvm.hexagon.V6.vpackwh.sat(<16 x i32>, <16 x i32>) #0 156declare <16 x i32> @llvm.hexagon.V6.vpackob(<16 x i32>, <16 x i32>) #0 157declare <16 x i32> @llvm.hexagon.V6.vpackoh(<16 x i32>, <16 x i32>) #0 158declare <32 x i32> @llvm.hexagon.V6.vunpackub(<16 x i32>) #0 159declare <32 x i32> @llvm.hexagon.V6.vunpackuh(<16 x i32>) #0 160declare <32 x i32> @llvm.hexagon.V6.vunpackb(<16 x i32>) #0 161declare <32 x i32> @llvm.hexagon.V6.vunpackh(<16 x i32>) #0 162declare <16 x i32> @llvm.hexagon.V6.vdealh(<16 x i32>) #0 163declare <16 x i32> @llvm.hexagon.V6.vdealb(<16 x i32>) #0 164declare <16 x i32> @llvm.hexagon.V6.vshuffh(<16 x i32>) #0 165declare <16 x i32> @llvm.hexagon.V6.vshuffb(<16 x i32>) #0 166 167attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvxv60,+hvx-length64b" } 168