brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · 0616f19 Raw
214 lines · plain
1// RUN: mlir-opt %s --pass-pipeline="builtin.module(llvm.func(canonicalize))" --split-input-file | FileCheck %s2 3// CHECK-LABEL: llvm.func @zext_basic4llvm.func @zext_basic() -> i64 {5  %0 = llvm.mlir.constant(1 : i32) : i326  %1 = llvm.zext %0 : i32 to i647  // CHECK: %[[RES:.*]] = llvm.mlir.constant(1 : i64) : i648  // CHECK: llvm.return %[[RES]] : i649  llvm.return %1 : i6410}11 12// CHECK-LABEL: llvm.func @zext_neg13llvm.func @zext_neg() -> i64 {14  %0 = llvm.mlir.constant(-1 : i32) : i3215  %1 = llvm.zext %0 : i32 to i6416  // CHECK: %[[RES:.*]] = llvm.mlir.constant(4294967295 : i64) : i6417  // CHECK: llvm.return %[[RES]] : i6418  llvm.return %1 : i6419}20 21// -----22 23// CHECK-LABEL: llvm.func @shl_basic24llvm.func @shl_basic() -> i32 {25  %0 = llvm.mlir.constant(1 : i32) : i3226  %1 = llvm.mlir.constant(1 : i32) : i3227  %2 = llvm.shl %0, %1 : i3228  // CHECK: %[[RES:.*]] = llvm.mlir.constant(2 : i32) : i3229  // CHECK: llvm.return %[[RES]] : i3230  llvm.return %2 : i3231}32 33// CHECK-LABEL: llvm.func @shl_multiple34llvm.func @shl_multiple() -> i32 {35  %0 = llvm.mlir.constant(45 : i32) : i3236  %1 = llvm.mlir.constant(7 : i32) : i3237  %2 = llvm.shl %0, %1 : i3238  // CHECK: %[[RES:.*]] = llvm.mlir.constant(5760 : i32) : i3239  // CHECK: llvm.return %[[RES]] : i3240  llvm.return %2 : i3241}42 43// -----44 45// CHECK-LABEL: llvm.func @or_basic46llvm.func @or_basic() -> i32 {47  %0 = llvm.mlir.constant(5 : i32) : i3248  %1 = llvm.mlir.constant(9 : i32) : i3249  %2 = llvm.or %0, %1 : i3250  // CHECK: %[[RES:.*]] = llvm.mlir.constant(13 : i32) : i3251  // CHECK: llvm.return %[[RES]] : i3252  llvm.return %2 : i3253}54 55// -----56 57// CHECK-LABEL: llvm.func @addressof58llvm.func @addressof() {59  // CHECK-NEXT: %[[ADDRESSOF:.+]] = llvm.mlir.addressof @foo60  %0 = llvm.mlir.addressof @foo : !llvm.ptr61  %1 = llvm.mlir.addressof @foo : !llvm.ptr62  // CHECK-NEXT: llvm.call @bar(%[[ADDRESSOF]], %[[ADDRESSOF]])63  llvm.call @bar(%0, %1) : (!llvm.ptr, !llvm.ptr) -> ()64  // CHECK-NEXT: llvm.return65  llvm.return66}67 68llvm.mlir.global constant @foo() : i3269 70llvm.func @bar(!llvm.ptr, !llvm.ptr)71 72// -----73 74// CHECK-LABEL: llvm.func @addressof_select75llvm.func @addressof_select(%arg: i1) -> !llvm.ptr {76  // CHECK-NEXT: %[[ADDRESSOF:.+]] = llvm.mlir.addressof @foo77  %0 = llvm.mlir.addressof @foo : !llvm.ptr78  %1 = llvm.mlir.addressof @foo : !llvm.ptr79  %2 = arith.select %arg, %0, %1 : !llvm.ptr80  // CHECK-NEXT: llvm.return %[[ADDRESSOF]]81  llvm.return %2 : !llvm.ptr82}83 84llvm.mlir.global constant @foo() : i3285 86llvm.func @bar(!llvm.ptr, !llvm.ptr)87 88// -----89 90// CHECK-LABEL: llvm.func @addressof_blocks91llvm.func @addressof_blocks(%arg: i1) -> !llvm.ptr {92  // CHECK-NEXT: %[[ADDRESSOF:.+]] = llvm.mlir.addressof @foo93  llvm.cond_br %arg, ^bb1, ^bb294^bb1:95  %0 = llvm.mlir.addressof @foo : !llvm.ptr96  llvm.return %0 : !llvm.ptr97^bb2:98  %1 = llvm.mlir.addressof @foo : !llvm.ptr99  // CHECK: return %[[ADDRESSOF]]100  llvm.return %1 : !llvm.ptr101}102 103llvm.mlir.global constant @foo() : i32104 105// -----106 107// CHECK-LABEL: llvm.func @undef108llvm.func @undef() {109  // CHECK-NEXT: %[[UNDEF:.+]] = llvm.mlir.undef : i32110  %undef1 = llvm.mlir.undef : i32111  %undef2 = llvm.mlir.undef : i32112  // CHECK-NEXT: llvm.call @foo(%[[UNDEF]], %[[UNDEF]])113  llvm.call @foo(%undef1, %undef2) : (i32, i32) -> ()114  // CHECK-NEXT: llvm.return115  llvm.return116}117 118llvm.func @foo(i32, i32)119 120// -----121 122// CHECK-LABEL: llvm.func @poison123llvm.func @poison() {124  // CHECK-NEXT: %[[POISON:.+]] = llvm.mlir.poison : i32125  %poison1 = llvm.mlir.poison : i32126  %poison2 = llvm.mlir.poison : i32127  // CHECK-NEXT: llvm.call @foo(%[[POISON]], %[[POISON]])128  llvm.call @foo(%poison1, %poison2) : (i32, i32) -> ()129  // CHECK-NEXT: llvm.return130  llvm.return131}132 133llvm.func @foo(i32, i32)134 135// -----136 137llvm.func @foo(!llvm.ptr, !llvm.ptr)138 139// CHECK-LABEL: llvm.func @null_pointer140llvm.func @null_pointer() {141  // CHECK-NEXT: %[[NULLPTR:.+]] = llvm.mlir.zero : !llvm.ptr142  %nullptr1 = llvm.mlir.zero : !llvm.ptr143  %nullptr2 = llvm.mlir.zero : !llvm.ptr144  // CHECK-NEXT: llvm.call @foo(%[[NULLPTR]], %[[NULLPTR]])145  llvm.call @foo(%nullptr1, %nullptr2) : (!llvm.ptr, !llvm.ptr) -> ()146  // CHECK-NEXT: llvm.return147  llvm.return148}149 150// -----151 152// CHECK-LABEL: llvm.func @zero_integer153llvm.func @zero_integer() -> i64 {154  // CHECK-NEXT: %[[ZERO:.+]] = llvm.mlir.constant(0 : i64) : i64155  %zero = llvm.mlir.zero : i32156  %zero_extended = llvm.zext %zero : i32 to i64157  // CHECK-NEXT: llvm.return %[[ZERO]]158  llvm.return %zero_extended : i64159}160 161// -----162 163// CHECK-LABEL: llvm.func @null_pointer_select164llvm.func @null_pointer_select(%cond: i1) -> !llvm.ptr {165  // CHECK-NEXT: %[[NULLPTR:.+]] = llvm.mlir.zero : !llvm.ptr166  %nullptr1 = llvm.mlir.zero : !llvm.ptr167  %nullptr2 = llvm.mlir.zero : !llvm.ptr168  %result = arith.select %cond, %nullptr1, %nullptr2 : !llvm.ptr169  // CHECK-NEXT: llvm.return %[[NULLPTR]]170  llvm.return %result : !llvm.ptr171}172 173// -----174 175llvm.func @malloc(i64) -> !llvm.ptr176 177// CHECK-LABEL: func.func @insert_op178func.func @insert_op(%arg0: index, %arg1: memref<13x13xi64>, %arg2: index) {179  %cst_7 = arith.constant dense<1526248407> : vector<1xi64>180  %1 = llvm.mlir.constant(1 : index) : i64181  %101 = vector.insert %1, %cst_7 [0] : i64 into vector<1xi64>182  vector.print %101 : vector<1xi64>183  return184}185 186// -----187 188// CHECK-LABEL: llvm.func @dso_local_equivalent_select189llvm.func @dso_local_equivalent_select(%arg: i1) -> !llvm.ptr {190  // CHECK-NEXT: %[[DSOLOCALEQ:.+]] = llvm.dso_local_equivalent @yay191  %0 = llvm.dso_local_equivalent @yay : !llvm.ptr192  %1 = llvm.dso_local_equivalent @yay : !llvm.ptr193  %2 = arith.select %arg, %0, %1 : !llvm.ptr194  // CHECK-NEXT: llvm.return %[[DSOLOCALEQ]]195  llvm.return %2 : !llvm.ptr196}197 198llvm.func @yay()199 200// -----201 202// CHECK-LABEL: llvm.func @blockaddress_select203llvm.func @blockaddress_select(%arg: i1) -> !llvm.ptr {204  // CHECK-NEXT: %[[ADDR:.+]] = llvm.blockaddress <function = @blockaddress_select, tag = <id = 1>>205  %0 = llvm.blockaddress <function = @blockaddress_select, tag = <id = 1>> : !llvm.ptr206  %1 = llvm.blockaddress <function = @blockaddress_select, tag = <id = 1>> : !llvm.ptr207  %2 = arith.select %arg, %0, %1 : !llvm.ptr208  // CHECK-NEXT: llvm.br ^bb1209  llvm.br ^bb1210^bb1:211  llvm.blocktag <id = 1>212  llvm.return %1 : !llvm.ptr213}214