1*8424bf20SUlrich Weigand; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -mtriple=systemz-unknown -mcpu=z13 | FileCheck %s --check-prefixes=CHECK,Z13 2*8424bf20SUlrich Weigand; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -mtriple=systemz-unknown -mcpu=arch15 | FileCheck %s --check-prefixes=CHECK,ARC15 3964565f4SJonas Paulsson; 4964565f4SJonas Paulsson 5964565f4SJonas Paulssondefine i128 @fun1(i128 %val1, i128 %val2) { 6964565f4SJonas Paulsson; CHECK-LABEL: 'fun1' 7964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %cmp = icmp eq i128 %val1, %val2 8*8424bf20SUlrich Weigand; Z13: Cost Model: Found an estimated cost of 5 for instruction: %v128 = sext i1 %cmp to i128 9*8424bf20SUlrich Weigand; ARC15: Cost Model: Found an estimated cost of 0 for instruction: %v128 = sext i1 %cmp to i128 10964565f4SJonas Paulsson %cmp = icmp eq i128 %val1, %val2 11964565f4SJonas Paulsson %v128 = sext i1 %cmp to i128 12964565f4SJonas Paulsson ret i128 %v128 13964565f4SJonas Paulsson} 14964565f4SJonas Paulsson 15964565f4SJonas Paulssondefine i128 @fun2(i128 %val1, i128 %val2) { 16964565f4SJonas Paulsson; CHECK-LABEL: 'fun2' 17964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %cmp = icmp eq i128 %val1, %val2 18964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 5 for instruction: %v128 = zext i1 %cmp to i128 19964565f4SJonas Paulsson %cmp = icmp eq i128 %val1, %val2 20964565f4SJonas Paulsson %v128 = zext i1 %cmp to i128 21964565f4SJonas Paulsson ret i128 %v128 22964565f4SJonas Paulsson} 23964565f4SJonas Paulsson 24964565f4SJonas Paulssondefine i128 @fun3(i128 %val1, i128 %val2, 25964565f4SJonas Paulsson i128 %val3, i128 %val4) { 26964565f4SJonas Paulsson; CHECK-LABEL: 'fun3' 27964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %cmp = icmp eq i128 %val1, %val2 28964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %add = add i128 %val3, %val4 29*8424bf20SUlrich Weigand; Z13: Cost Model: Found an estimated cost of 4 for instruction: %sel = select i1 %cmp, i128 %val3, i128 %add 30*8424bf20SUlrich Weigand; ARC15: Cost Model: Found an estimated cost of 1 for instruction: %sel = select i1 %cmp, i128 %val3, i128 %add 31964565f4SJonas Paulsson %cmp = icmp eq i128 %val1, %val2 32964565f4SJonas Paulsson %add = add i128 %val3, %val4 33964565f4SJonas Paulsson %sel = select i1 %cmp, i128 %val3, i128 %add 34964565f4SJonas Paulsson ret i128 %sel 35964565f4SJonas Paulsson} 36964565f4SJonas Paulsson 37*8424bf20SUlrich Weiganddefine i64 @fun3_sel64(i128 %val1, i128 %val2, 38*8424bf20SUlrich Weigand i64 %val3, i64 %val4) { 39*8424bf20SUlrich Weigand; CHECK-LABEL: 'fun3_sel64' 40*8424bf20SUlrich Weigand; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %cmp = icmp ugt i128 %val1, %val2 41*8424bf20SUlrich Weigand; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %add = add i64 %val3, %val4 42*8424bf20SUlrich Weigand; Z13: Cost Model: Found an estimated cost of 4 for instruction: %sel = select i1 %cmp, i64 %val3, i64 %add 43*8424bf20SUlrich Weigand; ARC15: Cost Model: Found an estimated cost of 1 for instruction: %sel = select i1 %cmp, i64 %val3, i64 %add 44*8424bf20SUlrich Weigand %cmp = icmp ugt i128 %val1, %val2 45*8424bf20SUlrich Weigand %add = add i64 %val3, %val4 46*8424bf20SUlrich Weigand %sel = select i1 %cmp, i64 %val3, i64 %add 47*8424bf20SUlrich Weigand ret i64 %sel 48*8424bf20SUlrich Weigand} 49*8424bf20SUlrich Weigand 50*8424bf20SUlrich Weiganddefine i128 @fun3_cmp64(i64 %val1, i64 %val2, 51*8424bf20SUlrich Weigand i128 %val3, i128 %val4) { 52*8424bf20SUlrich Weigand; CHECK-LABEL: 'fun3_cmp64' 53*8424bf20SUlrich Weigand; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %cmp = icmp slt i64 %val1, %val2 54*8424bf20SUlrich Weigand; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %add = add i128 %val3, %val4 55*8424bf20SUlrich Weigand; CHECk: Cost Model: Found an estimated cost of 4 for instruction: %sel = select i1 %cmp, i128 %val3, i128 %add 56*8424bf20SUlrich Weigand %cmp = icmp slt i64 %val1, %val2 57*8424bf20SUlrich Weigand %add = add i128 %val3, %val4 58*8424bf20SUlrich Weigand %sel = select i1 %cmp, i128 %val3, i128 %add 59*8424bf20SUlrich Weigand ret i128 %sel 60*8424bf20SUlrich Weigand} 61*8424bf20SUlrich Weigand 62964565f4SJonas Paulssondefine i128 @fun4(ptr %src) { 63964565f4SJonas Paulsson; CHECK-LABEL: 'fun4' 64964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %res = sext i64 %v to i128 65964565f4SJonas Paulsson %v = load i64, ptr %src, align 8 66964565f4SJonas Paulsson %res = sext i64 %v to i128 67964565f4SJonas Paulsson ret i128 %res 68964565f4SJonas Paulsson} 69964565f4SJonas Paulsson 70964565f4SJonas Paulssondefine i128 @fun5(i64 %lhs, i64 %rhs) { 71964565f4SJonas Paulsson; CHECK-LABEL: 'fun5' 72964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %res = sext i64 %v to i128 73964565f4SJonas Paulsson %v = add i64 %lhs, %rhs 74964565f4SJonas Paulsson %res = sext i64 %v to i128 75964565f4SJonas Paulsson ret i128 %res 76964565f4SJonas Paulsson} 77964565f4SJonas Paulsson 78964565f4SJonas Paulssondefine i128 @fun6(ptr %src) { 79964565f4SJonas Paulsson; CHECK-LABEL: 'fun6' 80964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %res = zext i64 %v to i128 81964565f4SJonas Paulsson %v = load i64, ptr %src, align 8 82964565f4SJonas Paulsson %res = zext i64 %v to i128 83964565f4SJonas Paulsson ret i128 %res 84964565f4SJonas Paulsson} 85964565f4SJonas Paulsson 86964565f4SJonas Paulssondefine i128 @fun7(i64 %lhs, i64 %rhs) { 87964565f4SJonas Paulsson; CHECK-LABEL: 'fun7' 88964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %res = zext i64 %v to i128 89964565f4SJonas Paulsson %v = add i64 %lhs, %rhs 90964565f4SJonas Paulsson %res = zext i64 %v to i128 91964565f4SJonas Paulsson ret i128 %res 92964565f4SJonas Paulsson} 93964565f4SJonas Paulsson 94964565f4SJonas Paulsson; Truncating store is free. 95964565f4SJonas Paulssondefine void @fun8(i128 %lhs, i128 %rhs, ptr %dst) { 96964565f4SJonas Paulsson; CHECK-LABEL: 'fun8' 97964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 0 for instruction: %t = trunc i128 %v to i64 98964565f4SJonas Paulsson %v = add i128 %lhs, %rhs 99964565f4SJonas Paulsson %t = trunc i128 %v to i64 100964565f4SJonas Paulsson store i64 %t, ptr %dst, align 8 101964565f4SJonas Paulsson ret void 102964565f4SJonas Paulsson} 103964565f4SJonas Paulsson 104964565f4SJonas Paulsson; If there is a non-store user, an extraction is needed. 105964565f4SJonas Paulssondefine i64 @fun9(i128 %lhs, i128 %rhs, ptr %dst) { 106964565f4SJonas Paulsson; CHECK-LABEL: 'fun9' 107964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %t = trunc i128 %v to i64 108964565f4SJonas Paulsson %v = add i128 %lhs, %rhs 109964565f4SJonas Paulsson %t = trunc i128 %v to i64 110964565f4SJonas Paulsson store i64 %t, ptr %dst, align 8 111964565f4SJonas Paulsson ret i64 %t 112964565f4SJonas Paulsson} 113964565f4SJonas Paulsson 114964565f4SJonas Paulsson; Truncation of load is free. 115964565f4SJonas Paulssondefine i64 @fun10(ptr %src) { 116964565f4SJonas Paulsson; CHECK-LABEL: 'fun10' 117964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 0 for instruction: %t = trunc i128 %v to i64 118964565f4SJonas Paulsson %v = load i128, ptr %src, align 8 119964565f4SJonas Paulsson %t = trunc i128 %v to i64 120964565f4SJonas Paulsson ret i64 %t 121964565f4SJonas Paulsson} 122964565f4SJonas Paulsson 123964565f4SJonas Paulsson; If the load has another user, the truncation becomes an extract. 124964565f4SJonas Paulssondefine i64 @fun11(ptr %src, i128 %val2, ptr %dst) { 125964565f4SJonas Paulsson; CHECK-LABEL: 'fun11' 126964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %t = trunc i128 %v to i64 127964565f4SJonas Paulsson %v = load i128, ptr %src, align 8 128964565f4SJonas Paulsson %t = trunc i128 %v to i64 129964565f4SJonas Paulsson %a = add i128 %v, %val2 130964565f4SJonas Paulsson store i128 %a, ptr %dst 131964565f4SJonas Paulsson ret i64 %t 132964565f4SJonas Paulsson} 133964565f4SJonas Paulsson 134964565f4SJonas Paulsson; Trunction with a GPR use typically requires an extraction. 135964565f4SJonas Paulssondefine i64 @fun12(i128 %lhs, i128 %rhs) { 136964565f4SJonas Paulsson; CHECK-LABEL: 'fun12' 137964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %t = trunc i128 %v to i64 138964565f4SJonas Paulsson %v = add i128 %lhs, %rhs 139964565f4SJonas Paulsson %t = trunc i128 %v to i64 140964565f4SJonas Paulsson ret i64 %t 141964565f4SJonas Paulsson} 142964565f4SJonas Paulsson 143964565f4SJonas Paulsson; Fp<->Int conversions require libcalls. 144964565f4SJonas Paulssondefine void @fun13() { 145964565f4SJonas Paulsson; CHECK-LABEL: 'fun13' 146964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v0 = fptosi fp128 undef to i128 147964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v1 = fptosi double undef to i128 148964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v2 = fptosi float undef to i128 149964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v3 = fptoui fp128 undef to i128 150964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v4 = fptoui double undef to i128 151964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v5 = fptoui float undef to i128 152964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v6 = sitofp i128 undef to fp128 153964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v7 = sitofp i128 undef to double 154964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v8 = sitofp i128 undef to float 155964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v9 = uitofp i128 undef to fp128 156964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v10 = uitofp i128 undef to double 157964565f4SJonas Paulsson; CHECK: Cost Model: Found an estimated cost of 30 for instruction: %v11 = uitofp i128 undef to float 158964565f4SJonas Paulsson %v0 = fptosi fp128 undef to i128 159964565f4SJonas Paulsson %v1 = fptosi double undef to i128 160964565f4SJonas Paulsson %v2 = fptosi float undef to i128 161964565f4SJonas Paulsson %v3 = fptoui fp128 undef to i128 162964565f4SJonas Paulsson %v4 = fptoui double undef to i128 163964565f4SJonas Paulsson %v5 = fptoui float undef to i128 164964565f4SJonas Paulsson %v6 = sitofp i128 undef to fp128 165964565f4SJonas Paulsson %v7 = sitofp i128 undef to double 166964565f4SJonas Paulsson %v8 = sitofp i128 undef to float 167964565f4SJonas Paulsson %v9 = uitofp i128 undef to fp128 168964565f4SJonas Paulsson %v10 = uitofp i128 undef to double 169964565f4SJonas Paulsson %v11 = uitofp i128 undef to float 170964565f4SJonas Paulsson ret void 171964565f4SJonas Paulsson} 172