brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · ac5ca32 Raw
247 lines · plain
1// RUN: mlir-opt %s -split-input-file -reconcile-unrealized-casts | FileCheck %s2 3// CHECK-LABEL: @unusedCast4// CHECK-SAME: (%[[arg0:.*]]: i64) -> i645// CHECK: return %[[arg0]] : i646 7func.func @unusedCast(%arg0: i64) -> i64 {8    %0 = builtin.unrealized_conversion_cast %arg0 : i64 to i329    return %arg0 : i6410}11 12// -----13 14// CHECK-LABEL: @sameTypes15// CHECK-SAME: (%[[arg0:.*]]: i64) -> i6416// CHECK: return %[[arg0]] : i6417 18func.func @sameTypes(%arg0: i64) -> i64 {19    %0 = builtin.unrealized_conversion_cast %arg0 : i64 to i6420    return %0 : i6421}22 23// -----24 25// CHECK-LABEL: @pair26// CHECK-SAME: (%[[arg0:.*]]: i64) -> i6427// CHECK: return %[[arg0]] : i6428 29func.func @pair(%arg0: i64) -> i64 {30    %0 = builtin.unrealized_conversion_cast %arg0 : i64 to i3231    %1 = builtin.unrealized_conversion_cast %0 : i32 to i6432    return %1 : i6433}34 35// -----36 37// CHECK-LABEL: @symmetricChain38// CHECK-SAME: (%[[arg0:.*]]: i64) -> i6439// CHECK: return %[[arg0]] : i6440 41func.func @symmetricChain(%arg0: i64) -> i64 {42    %0 = builtin.unrealized_conversion_cast %arg0 : i64 to i3243    %1 = builtin.unrealized_conversion_cast %0 : i32 to i144    %2 = builtin.unrealized_conversion_cast %1 : i1 to i3245    %3 = builtin.unrealized_conversion_cast %2 : i32 to i6446    return %3 : i6447}48 49// -----50 51// CHECK-LABEL: @asymmetricChain52// CHECK-SAME: (%[[arg0:.*]]: i64) -> i6453// CHECK: return %[[arg0]] : i6454 55func.func @asymmetricChain(%arg0: i64) -> i64 {56    %0 = builtin.unrealized_conversion_cast %arg0 : i64 to i3257    %1 = builtin.unrealized_conversion_cast %0 : i32 to i158    %2 = builtin.unrealized_conversion_cast %1 : i1 to i6459    return %2 : i6460}61 62// -----63 64// CHECK-LABEL: @unusedChain65// CHECK-SAME: (%[[arg0:.*]]: i64) -> i6466// CHECK: return %[[arg0]] : i6467 68func.func @unusedChain(%arg0: i64) -> i64 {69    %0 = builtin.unrealized_conversion_cast %arg0 : i64 to i3270    %1 = builtin.unrealized_conversion_cast %0 : i32 to i171    return %arg0 : i6472}73 74// -----75 76// CHECK-LABEL: @bifurcation77// CHECK-SAME: (%[[arg0:.*]]: i64) -> i6478// CHECK: %[[result:.*]] = arith.addi %[[arg0]], %[[arg0]] : i6479// CHECK: return %[[result]] : i6480 81func.func @bifurcation(%arg0: i64) -> i64 {82    %0 = builtin.unrealized_conversion_cast %arg0 : i64 to i3283    %1 = builtin.unrealized_conversion_cast %0 : i32 to i184    %2 = builtin.unrealized_conversion_cast %1 : i1 to i6485    %3 = builtin.unrealized_conversion_cast %1 : i1 to i3286    %4 = builtin.unrealized_conversion_cast %3 : i32 to i6487    %5 = arith.addi %2, %4 : i6488    return %5 : i6489}90 91// -----92 93// CHECK-LABEL: @unusedBifurcation94// CHECK-SAME: (%[[arg0:.*]]: i64) -> i6495// CHECK: %[[result:.*]] = arith.addi %[[arg0]], %[[arg0]] : i6496// CHECK: return %[[result]] : i6497 98func.func @unusedBifurcation(%arg0: i64) -> i64 {99    %0 = builtin.unrealized_conversion_cast %arg0 : i64 to i32100    %1 = builtin.unrealized_conversion_cast %0 : i32 to i1101    %2 = builtin.unrealized_conversion_cast %1 : i1 to i64102    %3 = builtin.unrealized_conversion_cast %0 : i32 to i64103    %4 = arith.addi %arg0, %3 : i64104    return %4 : i64105}106 107// -----108 109// CHECK-LABEL: @liveSingleCast110// CHECK-SAME: (%[[arg0:.*]]: i64) -> i32111// CHECK: %[[liveCast:.*]] = builtin.unrealized_conversion_cast %[[arg0]] : i64 to i32112// CHECK: return %[[liveCast]] : i32113 114func.func @liveSingleCast(%arg0: i64) -> i32 {115    %0 = builtin.unrealized_conversion_cast %arg0 : i64 to i32116    return %0 : i32117}118 119// -----120 121// CHECK-LABEL: @liveChain122// CHECK-SAME: (%[[arg0:.*]]: i64) -> i32123// CHECK: %[[cast0:.*]] = builtin.unrealized_conversion_cast %[[arg0]] : i64 to i1124// CHECK: %[[cast1:.*]] = builtin.unrealized_conversion_cast %[[cast0]] : i1 to i32125// CHECK: return %[[cast1]] : i32126 127func.func @liveChain(%arg0: i64) -> i32 {128    %0 = builtin.unrealized_conversion_cast %arg0 : i64 to i1129    %1 = builtin.unrealized_conversion_cast %0 : i1 to i32130    return %1 : i32131}132 133// -----134 135// CHECK-LABEL: @liveBifurcation136// CHECK-SAME: (%[[arg0:.*]]: i64) -> i64137// CHECK: %[[cast0:.*]] = builtin.unrealized_conversion_cast %[[arg0]] : i64 to i32138// CHECK: %[[cast2:.*]] = builtin.unrealized_conversion_cast %[[cast0]] : i32 to i1139// CHECK: %[[extsi:.*]] = arith.extsi %[[cast2]] : i1 to i64140// CHECK: %[[result:.*]] = arith.addi %[[arg0]], %[[extsi]] : i64141// CHECK: return %[[result]] : i64142 143func.func @liveBifurcation(%arg0: i64) -> i64 {144    %0 = builtin.unrealized_conversion_cast %arg0 : i64 to i32145    %1 = builtin.unrealized_conversion_cast %0 : i32 to i64146    %2 = builtin.unrealized_conversion_cast %0 : i32 to i1147    %3 = arith.extsi %2 : i1 to i64148    %4 = arith.addi %1, %3 : i64149    return %4 : i64150}151 152// -----153 154// CHECK-LABEL: func @deadNToOneCast(155// CHECK-NEXT:    return156func.func @deadNToOneCast(%arg0: index, %arg1: index) {157    %0 = builtin.unrealized_conversion_cast %arg0, %arg1 : index, index to i64158    return159}160 161// -----162 163// CHECK-LABEL: func @swappingOperands(164// CHECK-SAME:      %[[arg0:.*]]: index, %[[arg1:.*]]: index165// CHECK:         %[[cast1:.*]]:2 = builtin.unrealized_conversion_cast %[[arg0]], %[[arg1]]166// CHECK:         %[[cast2:.*]]:2 = builtin.unrealized_conversion_cast %[[cast1]]#1, %[[cast1]]#0167// CHECK:         %[[cast3:.*]]:2 = builtin.unrealized_conversion_cast %[[cast2]]#0, %[[cast2]]#1168// CHECK:         return %[[cast3]]#0, %[[cast3]]#1169func.func @swappingOperands(%arg0: index, %arg1: index) -> (index, index) {170    %0:2 = builtin.unrealized_conversion_cast %arg0, %arg1 : index, index to i64, i64171    %1:2 = builtin.unrealized_conversion_cast %0#1, %0#0 : i64, i64 to i32, i32172    %2:2 = builtin.unrealized_conversion_cast %1#0, %1#1 : i32, i32 to index, index173    return %2#0, %2#1 : index, index174}175 176// -----177 178// CHECK-LABEL: func @matchingOperands(179// CHECK-SAME:      %[[arg0:.*]]: index, %[[arg1:.*]]: index180// CHECK:         return %[[arg0]], %[[arg1]]181func.func @matchingOperands(%arg0: index, %arg1: index) -> (index, index) {182    %0:2 = builtin.unrealized_conversion_cast %arg0, %arg1 : index, index to i64, i64183    %1:3 = builtin.unrealized_conversion_cast %0#0, %0#1 : i64, i64 to i32, i32, i32184    %2:2 = builtin.unrealized_conversion_cast %1#0, %1#1, %1#2 : i32, i32, i32 to index, index185    return %2#0, %2#1 : index, index186}187 188// -----189 190// CHECK-LABEL: func @emptyCast()191// CHECK:         %[[cast:.*]] = builtin.unrealized_conversion_cast to index192// CHECK:         return %[[cast]]193func.func @emptyCast() -> index {194    %0 = builtin.unrealized_conversion_cast to index195    return %0 : index196}197 198// -----199 200// CHECK-LABEL: test.graph_region201//  CHECK-NEXT:   "test.return"() : () -> ()202test.graph_region {203  %0 = builtin.unrealized_conversion_cast %2 : i32 to i64204  %1 = builtin.unrealized_conversion_cast %0 : i64 to i16205  %2 = builtin.unrealized_conversion_cast %1 : i16 to i32206  "test.return"() : () -> ()207}208 209// -----210 211// CHECK-LABEL: test.graph_region212//  CHECK-NEXT:   %[[cast0:.*]] = builtin.unrealized_conversion_cast %[[cast2:.*]] : i32 to i64213//  CHECK-NEXT:   %[[cast1:.*]] = builtin.unrealized_conversion_cast %[[cast0]] : i64 to i16214//  CHECK-NEXT:   %[[cast2]] = builtin.unrealized_conversion_cast %[[cast1]] : i16 to i32215//  CHECK-NEXT:   "test.user"(%[[cast2]]) : (i32) -> ()216//  CHECK-NEXT:   "test.return"() : () -> ()217test.graph_region {218  %0 = builtin.unrealized_conversion_cast %2 : i32 to i64219  %1 = builtin.unrealized_conversion_cast %0 : i64 to i16220  %2 = builtin.unrealized_conversion_cast %1 : i16 to i32221  "test.user"(%2) : (i32) -> ()222  "test.return"() : () -> ()223}224 225// -----226 227// CHECK-LABEL: test.graph_region228//  CHECK-NEXT:   "test.return"() : () -> ()229test.graph_region {230  %0 = builtin.unrealized_conversion_cast %0 : i32 to i32231  "test.return"() : () -> ()232}233 234// -----235 236// CHECK-LABEL: test.graph_region237//  CHECK-NEXT:   %[[c0:.*]] = arith.constant238//  CHECK-NEXT:   %[[cast:.*]]:2 = builtin.unrealized_conversion_cast %[[c0]], %[[cast]]#1 : i32, i32 to i32, i32239//  CHECK-NEXT:   "test.user"(%[[cast]]#0) : (i32) -> ()240//  CHECK-NEXT:   "test.return"() : () -> ()241test.graph_region {242  %cst = arith.constant 0 : i32243  %0, %1 = builtin.unrealized_conversion_cast %cst, %1 : i32, i32 to i32, i32244  "test.user"(%0) : (i32) -> ()245  "test.return"() : () -> ()246}247