1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py 2; RUN: opt < %s -mtriple=aarch64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output | FileCheck %s 3 4; Verify the cost of scalar bitreverse instructions. 5 6target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" 7 8declare i8 @llvm.bitreverse.i8(i8) 9declare i16 @llvm.bitreverse.i16(i16) 10declare i32 @llvm.bitreverse.i32(i32) 11declare i64 @llvm.bitreverse.i64(i64) 12 13define i64 @var_bitreverse_i64(i64 %a) { 14; CHECK-LABEL: 'var_bitreverse_i64' 15; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bitreverse = call i64 @llvm.bitreverse.i64(i64 %a) 16; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i64 %bitreverse 17; 18 %bitreverse = call i64 @llvm.bitreverse.i64(i64 %a) 19 ret i64 %bitreverse 20} 21 22define i32 @var_bitreverse_i32(i32 %a) { 23; CHECK-LABEL: 'var_bitreverse_i32' 24; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bitreverse = call i32 @llvm.bitreverse.i32(i32 %a) 25; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i32 %bitreverse 26; 27 %bitreverse = call i32 @llvm.bitreverse.i32(i32 %a) 28 ret i32 %bitreverse 29} 30 31define i16 @var_bitreverse_i16(i16 %a) { 32; CHECK-LABEL: 'var_bitreverse_i16' 33; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bitreverse = call i16 @llvm.bitreverse.i16(i16 %a) 34; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i16 %bitreverse 35; 36 %bitreverse = call i16 @llvm.bitreverse.i16(i16 %a) 37 ret i16 %bitreverse 38} 39 40define i8 @var_bitreverse_i8(i8 %a) { 41; CHECK-LABEL: 'var_bitreverse_i8' 42; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bitreverse = call i8 @llvm.bitreverse.i8(i8 %a) 43; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i8 %bitreverse 44; 45 %bitreverse = call i8 @llvm.bitreverse.i8(i8 %a) 46 ret i8 %bitreverse 47} 48 49; Verify the cost of vector bitreverse instructions. 50 51declare <1 x i64> @llvm.bitreverse.v1i64(<1 x i64>) 52declare <2 x i32> @llvm.bitreverse.v2i32(<2 x i32>) 53declare <4 x i16> @llvm.bitreverse.v4i16(<4 x i16>) 54declare <8 x i8> @llvm.bitreverse.v8i8(<8 x i8>) 55 56declare <2 x i64> @llvm.bitreverse.v2i64(<2 x i64>) 57declare <4 x i32> @llvm.bitreverse.v4i32(<4 x i32>) 58declare <8 x i16> @llvm.bitreverse.v8i16(<8 x i16>) 59declare <16 x i8> @llvm.bitreverse.v16i8(<16 x i8>) 60 61declare <4 x i64> @llvm.bitreverse.v4i64(<4 x i64>) 62declare <8 x i32> @llvm.bitreverse.v8i32(<8 x i32>) 63declare <16 x i16> @llvm.bitreverse.v16i16(<16 x i16>) 64declare <32 x i8> @llvm.bitreverse.v32i8(<32 x i8>) 65 66define <1 x i64> @var_bitreverse_v1i64(<1 x i64> %a) { 67; CHECK-LABEL: 'var_bitreverse_v1i64' 68; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bitreverse = call <1 x i64> @llvm.bitreverse.v1i64(<1 x i64> %a) 69; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <1 x i64> %bitreverse 70; 71 %bitreverse = call <1 x i64> @llvm.bitreverse.v1i64(<1 x i64> %a) 72 ret <1 x i64> %bitreverse 73} 74 75define <2 x i64> @var_bitreverse_v2i64(<2 x i64> %a) { 76; CHECK-LABEL: 'var_bitreverse_v2i64' 77; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bitreverse = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a) 78; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %bitreverse 79; 80 %bitreverse = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a) 81 ret <2 x i64> %bitreverse 82} 83 84define <4 x i64> @var_bitreverse_v4i64(<4 x i64> %a) { 85; CHECK-LABEL: 'var_bitreverse_v4i64' 86; CHECK-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %bitreverse = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a) 87; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %bitreverse 88; 89 %bitreverse = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a) 90 ret <4 x i64> %bitreverse 91} 92 93define <2 x i32> @var_bitreverse_v2i32(<2 x i32> %a) { 94; CHECK-LABEL: 'var_bitreverse_v2i32' 95; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bitreverse = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> %a) 96; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %bitreverse 97; 98 %bitreverse = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> %a) 99 ret <2 x i32> %bitreverse 100} 101 102define <4 x i32> @var_bitreverse_v4i32(<4 x i32> %a) { 103; CHECK-LABEL: 'var_bitreverse_v4i32' 104; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bitreverse = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a) 105; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %bitreverse 106; 107 %bitreverse = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a) 108 ret <4 x i32> %bitreverse 109} 110 111define <8 x i32> @var_bitreverse_v8i32(<8 x i32> %a) { 112; CHECK-LABEL: 'var_bitreverse_v8i32' 113; CHECK-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %bitreverse = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a) 114; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %bitreverse 115; 116 %bitreverse = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a) 117 ret <8 x i32> %bitreverse 118} 119 120define <4 x i16> @var_bitreverse_v4i16(<4 x i16> %a) { 121; CHECK-LABEL: 'var_bitreverse_v4i16' 122; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bitreverse = call <4 x i16> @llvm.bitreverse.v4i16(<4 x i16> %a) 123; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i16> %bitreverse 124; 125 %bitreverse = call <4 x i16> @llvm.bitreverse.v4i16(<4 x i16> %a) 126 ret <4 x i16> %bitreverse 127} 128 129define <8 x i16> @var_bitreverse_v8i16(<8 x i16> %a) { 130; CHECK-LABEL: 'var_bitreverse_v8i16' 131; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bitreverse = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a) 132; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bitreverse 133; 134 %bitreverse = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a) 135 ret <8 x i16> %bitreverse 136} 137 138define <16 x i16> @var_bitreverse_v16i16(<16 x i16> %a) { 139; CHECK-LABEL: 'var_bitreverse_v16i16' 140; CHECK-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %bitreverse = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a) 141; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bitreverse 142; 143 %bitreverse = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a) 144 ret <16 x i16> %bitreverse 145} 146 147define <8 x i8> @var_bitreverse_v8i8(<8 x i8> %a) { 148; CHECK-LABEL: 'var_bitreverse_v8i8' 149; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bitreverse = call <8 x i8> @llvm.bitreverse.v8i8(<8 x i8> %a) 150; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i8> %bitreverse 151; 152 %bitreverse = call <8 x i8> @llvm.bitreverse.v8i8(<8 x i8> %a) 153 ret <8 x i8> %bitreverse 154} 155 156define <16 x i8> @var_bitreverse_v16i8(<16 x i8> %a) { 157; CHECK-LABEL: 'var_bitreverse_v16i8' 158; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bitreverse = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> %a) 159; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bitreverse 160; 161 %bitreverse = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> %a) 162 ret <16 x i8> %bitreverse 163} 164 165define <32 x i8> @var_bitreverse_v32i8(<32 x i8> %a) { 166; CHECK-LABEL: 'var_bitreverse_v32i8' 167; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bitreverse = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a) 168; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bitreverse 169; 170 %bitreverse = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a) 171 ret <32 x i8> %bitreverse 172} 173