1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py 2; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=thumbv8.1m.main-none-eabi -mattr=+mve < %s | FileCheck %s --check-prefix=MVE-RECIP 3; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=code-size -mtriple=thumbv8.1m.main-none-eabi -mattr=+mve < %s | FileCheck %s --check-prefix=MVE-SIZE 4 5target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" 6 7declare i64 @llvm.abs.i64(i64, i1) 8declare <2 x i64> @llvm.abs.v2i64(<2 x i64>, i1) 9declare <4 x i64> @llvm.abs.v4i64(<4 x i64>, i1) 10declare <8 x i64> @llvm.abs.v8i64(<8 x i64>, i1) 11 12declare i32 @llvm.abs.i32(i32, i1) 13declare <2 x i32> @llvm.abs.v2i32(<2 x i32>, i1) 14declare <4 x i32> @llvm.abs.v4i32(<4 x i32>, i1) 15declare <8 x i32> @llvm.abs.v8i32(<8 x i32>, i1) 16declare <16 x i32> @llvm.abs.v16i32(<16 x i32>, i1) 17 18declare i16 @llvm.abs.i16(i16, i1) 19declare <2 x i16> @llvm.abs.v2i16(<2 x i16>, i1) 20declare <4 x i16> @llvm.abs.v4i16(<4 x i16>, i1) 21declare <8 x i16> @llvm.abs.v8i16(<8 x i16>, i1) 22declare <16 x i16> @llvm.abs.v16i16(<16 x i16>, i1) 23declare <32 x i16> @llvm.abs.v32i16(<32 x i16>, i1) 24 25declare i8 @llvm.abs.i8(i8, i1) 26declare <2 x i8> @llvm.abs.v2i8(<2 x i8>, i1) 27declare <4 x i8> @llvm.abs.v4i8(<4 x i8>, i1) 28declare <8 x i8> @llvm.abs.v8i8(<8 x i8>, i1) 29declare <16 x i8> @llvm.abs.v16i8(<16 x i8>, i1) 30declare <32 x i8> @llvm.abs.v32i8(<32 x i8>, i1) 31declare <64 x i8> @llvm.abs.v64i8(<64 x i8>, i1) 32 33define i32 @abs(i32 %arg) { 34; MVE-RECIP-LABEL: 'abs' 35; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %I64 = call i64 @llvm.abs.i64(i64 undef, i1 false) 36; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 74 for instruction: %V2I64 = call <2 x i64> @llvm.abs.v2i64(<2 x i64> undef, i1 false) 37; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 148 for instruction: %V4I64 = call <4 x i64> @llvm.abs.v4i64(<4 x i64> undef, i1 false) 38; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 296 for instruction: %V8I64 = call <8 x i64> @llvm.abs.v8i64(<8 x i64> undef, i1 false) 39; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %I32 = call i32 @llvm.abs.i32(i32 undef, i1 false) 40; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 40 for instruction: %V2I32 = call <2 x i32> @llvm.abs.v2i32(<2 x i32> undef, i1 false) 41; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %V4I32 = call <4 x i32> @llvm.abs.v4i32(<4 x i32> undef, i1 false) 42; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V8I32 = call <8 x i32> @llvm.abs.v8i32(<8 x i32> undef, i1 false) 43; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %V16I32 = call <16 x i32> @llvm.abs.v16i32(<16 x i32> undef, i1 false) 44; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %I16 = call i16 @llvm.abs.i16(i16 undef, i1 false) 45; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 40 for instruction: %V2I16 = call <2 x i16> @llvm.abs.v2i16(<2 x i16> undef, i1 false) 46; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %V4I16 = call <4 x i16> @llvm.abs.v4i16(<4 x i16> undef, i1 false) 47; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %V8I16 = call <8 x i16> @llvm.abs.v8i16(<8 x i16> undef, i1 false) 48; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V16I16 = call <16 x i16> @llvm.abs.v16i16(<16 x i16> undef, i1 false) 49; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %V32I16 = call <32 x i16> @llvm.abs.v32i16(<32 x i16> undef, i1 false) 50; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %I8 = call i8 @llvm.abs.i8(i8 undef, i1 false) 51; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 40 for instruction: %V2I8 = call <2 x i8> @llvm.abs.v2i8(<2 x i8> undef, i1 false) 52; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %V4I8 = call <4 x i8> @llvm.abs.v4i8(<4 x i8> undef, i1 false) 53; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %V8I8 = call <8 x i8> @llvm.abs.v8i8(<8 x i8> undef, i1 false) 54; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %V16I8 = call <16 x i8> @llvm.abs.v16i8(<16 x i8> undef, i1 false) 55; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V32I8 = call <32 x i8> @llvm.abs.v32i8(<32 x i8> undef, i1 false) 56; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %V64I8 = call <64 x i8> @llvm.abs.v64i8(<64 x i8> undef, i1 false) 57; MVE-RECIP-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef 58; 59; MVE-SIZE-LABEL: 'abs' 60; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %I64 = call i64 @llvm.abs.i64(i64 undef, i1 false) 61; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 38 for instruction: %V2I64 = call <2 x i64> @llvm.abs.v2i64(<2 x i64> undef, i1 false) 62; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 74 for instruction: %V4I64 = call <4 x i64> @llvm.abs.v4i64(<4 x i64> undef, i1 false) 63; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 146 for instruction: %V8I64 = call <8 x i64> @llvm.abs.v8i64(<8 x i64> undef, i1 false) 64; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %I32 = call i32 @llvm.abs.i32(i32 undef, i1 false) 65; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %V2I32 = call <2 x i32> @llvm.abs.v2i32(<2 x i32> undef, i1 false) 66; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = call <4 x i32> @llvm.abs.v4i32(<4 x i32> undef, i1 false) 67; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %V8I32 = call <8 x i32> @llvm.abs.v8i32(<8 x i32> undef, i1 false) 68; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V16I32 = call <16 x i32> @llvm.abs.v16i32(<16 x i32> undef, i1 false) 69; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %I16 = call i16 @llvm.abs.i16(i16 undef, i1 false) 70; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %V2I16 = call <2 x i16> @llvm.abs.v2i16(<2 x i16> undef, i1 false) 71; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I16 = call <4 x i16> @llvm.abs.v4i16(<4 x i16> undef, i1 false) 72; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = call <8 x i16> @llvm.abs.v8i16(<8 x i16> undef, i1 false) 73; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %V16I16 = call <16 x i16> @llvm.abs.v16i16(<16 x i16> undef, i1 false) 74; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V32I16 = call <32 x i16> @llvm.abs.v32i16(<32 x i16> undef, i1 false) 75; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %I8 = call i8 @llvm.abs.i8(i8 undef, i1 false) 76; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %V2I8 = call <2 x i8> @llvm.abs.v2i8(<2 x i8> undef, i1 false) 77; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I8 = call <4 x i8> @llvm.abs.v4i8(<4 x i8> undef, i1 false) 78; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I8 = call <8 x i8> @llvm.abs.v8i8(<8 x i8> undef, i1 false) 79; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I8 = call <16 x i8> @llvm.abs.v16i8(<16 x i8> undef, i1 false) 80; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %V32I8 = call <32 x i8> @llvm.abs.v32i8(<32 x i8> undef, i1 false) 81; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %V64I8 = call <64 x i8> @llvm.abs.v64i8(<64 x i8> undef, i1 false) 82; MVE-SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef 83; 84 %I64 = call i64 @llvm.abs.i64(i64 undef, i1 false) 85 %V2I64 = call <2 x i64> @llvm.abs.v2i64(<2 x i64> undef, i1 false) 86 %V4I64 = call <4 x i64> @llvm.abs.v4i64(<4 x i64> undef, i1 false) 87 %V8I64 = call <8 x i64> @llvm.abs.v8i64(<8 x i64> undef, i1 false) 88 89 %I32 = call i32 @llvm.abs.i32(i32 undef, i1 false) 90 %V2I32 = call <2 x i32> @llvm.abs.v2i32(<2 x i32> undef, i1 false) 91 %V4I32 = call <4 x i32> @llvm.abs.v4i32(<4 x i32> undef, i1 false) 92 %V8I32 = call <8 x i32> @llvm.abs.v8i32(<8 x i32> undef, i1 false) 93 %V16I32 = call <16 x i32> @llvm.abs.v16i32(<16 x i32> undef, i1 false) 94 95 %I16 = call i16 @llvm.abs.i16(i16 undef, i1 false) 96 %V2I16 = call <2 x i16> @llvm.abs.v2i16(<2 x i16> undef, i1 false) 97 %V4I16 = call <4 x i16> @llvm.abs.v4i16(<4 x i16> undef, i1 false) 98 %V8I16 = call <8 x i16> @llvm.abs.v8i16(<8 x i16> undef, i1 false) 99 %V16I16 = call <16 x i16> @llvm.abs.v16i16(<16 x i16> undef, i1 false) 100 %V32I16 = call <32 x i16> @llvm.abs.v32i16(<32 x i16> undef, i1 false) 101 102 %I8 = call i8 @llvm.abs.i8(i8 undef, i1 false) 103 %V2I8 = call <2 x i8> @llvm.abs.v2i8(<2 x i8> undef, i1 false) 104 %V4I8 = call <4 x i8> @llvm.abs.v4i8(<4 x i8> undef, i1 false) 105 %V8I8 = call <8 x i8> @llvm.abs.v8i8(<8 x i8> undef, i1 false) 106 %V16I8 = call <16 x i8> @llvm.abs.v16i8(<16 x i8> undef, i1 false) 107 %V32I8 = call <32 x i8> @llvm.abs.v32i8(<32 x i8> undef, i1 false) 108 %V64I8 = call <64 x i8> @llvm.abs.v64i8(<64 x i8> undef, i1 false) 109 110 ret i32 undef 111} 112 113