brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.7 KiB · c263afe Raw
415 lines · plain
1// RUN: mlir-translate -verify-diagnostics -split-input-file -mlir-to-llvmir %s2 3// expected-error @below{{cannot be converted to LLVM IR}}4func.func @foo() {5  llvm.return6}7 8// -----9 10// expected-error @below{{LLVM attribute 'readonly' does not expect a value}}11llvm.func @passthrough_unexpected_value() attributes {passthrough = [["readonly", "42"]]}12 13// -----14 15// expected-error @below{{LLVM attribute 'alignstack' expects a value}}16llvm.func @passthrough_expected_value() attributes {passthrough = ["alignstack"]}17 18// -----19 20// expected-error @below{{expected 'passthrough' to contain string or array attributes}}21llvm.func @passthrough_wrong_type() attributes {passthrough = [42]}22 23// -----24 25// expected-error @below{{expected arrays within 'passthrough' to contain two strings}}26llvm.func @passthrough_wrong_type() attributes {27  passthrough = [[ 42, 42 ]]28}29 30// -----31 32// expected-error @below{{LLVM attribute 'readonly' does not expect a value}}33llvm.mlir.global external @target_specific_attrs_unexpected_value() {target_specific_attrs = [["readonly", "42"]]} : f6434 35// -----36 37// expected-error @below{{LLVM attribute 'alignstack' expects a value}}38llvm.mlir.global external @target_specific_attrs_expected_value() {target_specific_attrs = ["alignstack"]} : f6439 40// -----41 42// expected-error @below{{expected 'target_specific_attrs' to contain string or array attributes}}43llvm.mlir.global external @target_specific_attrs_wrong_type() {target_specific_attrs = [42]} : f6444 45// -----46 47// expected-error @below{{expected arrays within 'target_specific_attrs' to contain two strings}}48llvm.mlir.global external @target_specific_attrs_wrong_type() {target_specific_attrs = [[ 42, 42 ]]} : f6449 50// -----51 52llvm.func @unary_float_intr_wrong_type(%arg0 : i32) -> i32 {53  // expected-error @below{{op operand #0 must be floating point LLVM type or LLVM dialect-compatible vector of floating point LLVM type}}54  %0 = "llvm.intr.exp"(%arg0) : (i32) -> i3255  llvm.return %0 : i3256}57 58// -----59 60llvm.func @binary_float_intr_wrong_type(%arg0 : f32, %arg1 : i32) -> i32 {61  // expected-error @below{{op operand #1 must be floating point LLVM type or LLVM dialect-compatible vector of floating point LLVM type}}62  %0 = "llvm.intr.pow"(%arg0, %arg1) : (f32, i32) -> i3263  llvm.return %0 : i3264}65 66// -----67 68llvm.func @unary_int_intr_wrong_type(%arg0 : f32) -> f32 {69  // expected-error @below{{op operand #0 must be signless integer or LLVM dialect-compatible vector of signless integer}}70  %0 = "llvm.intr.ctpop"(%arg0) : (f32) -> f3271  llvm.return %0 : f3272}73 74// -----75 76llvm.func @binary_int_intr_wrong_type(%arg0 : i32, %arg1 : f32) -> f32 {77  // expected-error @below{{op operand #1 must be signless integer or LLVM dialect-compatible vector of signless integer}}78  %0 = "llvm.intr.smax"(%arg0, %arg1) : (i32, f32) -> f3279  llvm.return %0 : f3280}81 82// -----83 84llvm.func @ternary_float_intr_wrong_type(%arg0 : f32, %arg1 : f32, %arg2 : i32) -> f32 {85  // expected-error @below{{op operand #2 must be floating point LLVM type or LLVM dialect-compatible vector of floating point LLVM type}}86  %0 = "llvm.intr.fma"(%arg0, %arg1, %arg2) : (f32, f32, i32) -> f3287  llvm.return %0 : f3288}89 90// -----91 92llvm.func @powi_intr_wrong_type(%arg0 : f32, %arg1 : f32) -> f32 {93  // expected-error @below{{op operand #1 must be signless integer, but got 'f32'}}94  %0 = "llvm.intr.powi"(%arg0, %arg1) : (f32, f32) -> f3295  llvm.return %0 : f3296}97 98// -----99 100llvm.func @memcpy_intr_wrong_type(%src : i64, %dst : i64, %len : i64) {101  // expected-error @below{{op operand #0 must be LLVM pointer type, but got 'i64'}}102  "llvm.intr.memcpy"(%src, %dst, %len) <{isVolatile = false}> : (i64, i64, i64) -> ()103  llvm.return104}105 106// -----107 108llvm.func @memmove_intr_wrong_type(%src : !llvm.ptr, %dst : i64, %len : i64) {109  // expected-error @below{{op operand #1 must be LLVM pointer type, but got 'i64'}}110  "llvm.intr.memmove"(%src, %dst, %len) <{isVolatile = false}> : (!llvm.ptr, i64, i64) -> ()111  llvm.return112}113 114// -----115 116llvm.func @memset_intr_wrong_type(%dst : !llvm.ptr, %val : i32, %len : i64) {117  // expected-error @below{{op operand #1 must be 8-bit signless integer, but got 'i32'}}118  "llvm.intr.memset"(%dst, %val, %len) <{isVolatile = false}> : (!llvm.ptr, i32, i64) -> ()119  llvm.return120}121 122// -----123 124llvm.func @sadd_overflow_intr_wrong_type(%arg0 : i32, %arg1 : f32) -> !llvm.struct<(i32, i1)> {125  // expected-error @below{{op operand #1 must be signless integer or LLVM dialect-compatible vector of signless integer, but got 'f32'}}126  %0 = "llvm.intr.sadd.with.overflow"(%arg0, %arg1) : (i32, f32) -> !llvm.struct<(i32, i1)>127  llvm.return %0 : !llvm.struct<(i32, i1)>128}129 130// -----131 132llvm.func @assume_intr_wrong_type(%cond : i16) {133  // expected-error @below{{op operand #0 must be 1-bit signless integer, but got 'i16'}}134  llvm.intr.assume %cond : i16135  llvm.return136}137 138// -----139 140llvm.func @vec_reduce_add_intr_wrong_type(%arg0 : vector<4xi32>) -> f32 {141  // expected-error @below{{op requires the same element type for all operands and results}}142  %0 = "llvm.intr.vector.reduce.add"(%arg0) : (vector<4xi32>) -> f32143  llvm.return %0 : f32144}145 146// -----147 148llvm.func @vec_reduce_fmax_intr_wrong_type(%arg0 : vector<4xi32>) -> i32 {149  // expected-error @below{{op operand #0 must be LLVM dialect-compatible vector of floating-point}}150  %0 = llvm.intr.vector.reduce.fmax(%arg0) : (vector<4xi32>) -> i32151  llvm.return %0 : i32152}153 154// -----155 156llvm.func @matrix_load_intr_wrong_type(%ptr : !llvm.ptr, %stride : i32) -> f32 {157  // expected-error @+2{{invalid kind of type specified: expected builtin.vector, but found 'f32'}}158  %0 = llvm.intr.matrix.column.major.load %ptr, <stride=%stride>159    { isVolatile = 0: i1, rows = 3: i32, columns = 16: i32} : f32 from !llvm.ptr stride i32160  llvm.return %0 : f32161}162 163// -----164 165llvm.func @matrix_store_intr_wrong_type(%matrix : vector<48xf32>, %ptr : i32, %stride : i64) {166  // expected-error @below {{op operand #1 must be LLVM pointer type, but got 'i32'}}167  llvm.intr.matrix.column.major.store %matrix, %ptr, <stride=%stride>168    { isVolatile = 0: i1, rows = 3: i32, columns = 16: i32} : vector<48xf32> to i32 stride i64169  llvm.return170}171 172// -----173 174llvm.func @matrix_multiply_intr_wrong_type(%arg0 : vector<64xf32>, %arg1 : f32) -> vector<12xf32> {175  // expected-error @+2{{invalid kind of type specified: expected builtin.vector, but found 'f32'}}176  %0 = llvm.intr.matrix.multiply %arg0, %arg1177    { lhs_rows = 4: i32, lhs_columns = 16: i32 , rhs_columns = 3: i32} : (vector<64xf32>, f32) -> vector<12xf32>178  llvm.return %0 : vector<12xf32>179}180 181// -----182 183llvm.func @matrix_transpose_intr_wrong_type(%matrix : f32) -> vector<48xf32> {184  // expected-error @below{{invalid kind of type specified: expected builtin.vector, but found 'f32'}}185  %0 = llvm.intr.matrix.transpose %matrix {rows = 3: i32, columns = 16: i32} : f32 into vector<48xf32>186  llvm.return %0 : vector<48xf32>187}188 189// -----190 191llvm.func @active_lane_intr_wrong_type(%base : i64, %n : vector<7xi64>) -> vector<7xi1> {192  // expected-error @below{{invalid kind of type specified: expected builtin.integer, but found 'vector<7xi64>'}}193  %0 = llvm.intr.get.active.lane.mask %base, %n : i64, vector<7xi64> to vector<7xi1>194  llvm.return %0 : vector<7xi1>195}196 197// -----198 199llvm.func @masked_load_intr_wrong_type(%ptr : i64, %mask : vector<7xi1>) -> vector<7xf32> {200  // expected-error @below{{op operand #0 must be LLVM pointer type, but got 'i64'}}201  %0 = llvm.intr.masked.load %ptr, %mask { alignment = 1: i32} : (i64, vector<7xi1>) -> vector<7xf32>202  llvm.return %0 : vector<7xf32>203}204 205// -----206 207llvm.func @masked_store_intr_wrong_type(%vec : vector<7xf32>, %ptr : !llvm.ptr, %mask : vector<7xi32>) {208  // expected-error @below{{op operand #2 must be LLVM dialect-compatible vector of 1-bit signless integer, but got 'vector<7xi32>}}209  llvm.intr.masked.store %vec, %ptr, %mask { alignment = 1: i32} : vector<7xf32>, vector<7xi32> into !llvm.ptr210  llvm.return211}212 213// -----214 215llvm.func @masked_gather_intr_wrong_type(%ptrs : vector<7xf32>, %mask : vector<7xi1>) -> vector<7xf32> {216  // expected-error @below{{op operand #0 must be LLVM dialect-compatible vector of LLVM pointer type, but got 'vector<7xf32>'}}217  %0 = llvm.intr.masked.gather %ptrs, %mask { alignment = 1: i32} : (vector<7xf32>, vector<7xi1>) -> vector<7xf32>218  llvm.return %0 : vector<7xf32>219}220 221// -----222 223llvm.func @masked_gather_intr_wrong_type_scalable(%ptrs : vector<7x!llvm.ptr>, %mask : vector<[7]xi1>) -> vector<[7]xf32> {224  // expected-error @below{{expected operand #1 type to be 'vector<[7]x!llvm.ptr>'}}225  %0 = llvm.intr.masked.gather %ptrs, %mask { alignment = 1: i32} : (vector<7x!llvm.ptr>, vector<[7]xi1>) -> vector<[7]xf32>226  llvm.return %0 : vector<[7]xf32>227}228 229// -----230 231llvm.func @masked_scatter_intr_wrong_type(%vec : f32, %ptrs : vector<7x!llvm.ptr>, %mask : vector<7xi1>) {232  // expected-error @below{{invalid kind of type specified: expected builtin.vector, but found 'f32'}}233  llvm.intr.masked.scatter %vec, %ptrs, %mask { alignment = 1: i32} : f32, vector<7xi1> into vector<7x!llvm.ptr>234  llvm.return235}236 237// -----238 239llvm.func @masked_scatter_intr_wrong_type_scalable(%vec : vector<[7]xf32>, %ptrs : vector<7x!llvm.ptr>, %mask : vector<[7]xi1>) {240  // expected-error @below{{expected operand #2 type to be 'vector<[7]x!llvm.ptr>'}}241  llvm.intr.masked.scatter %vec, %ptrs, %mask { alignment = 1: i32} : vector<[7]xf32>, vector<[7]xi1> into vector<7x!llvm.ptr>242  llvm.return243}244 245// -----246 247llvm.func @stepvector_intr_wrong_type() -> vector<7xf32> {248  // expected-error @below{{op result #0 must be LLVM dialect-compatible vector of signless integer, but got 'vector<7xf32>'}}249  %0 = llvm.intr.stepvector : vector<7xf32>250  llvm.return %0 : vector<7xf32>251}252 253// -----254 255// expected-error @below{{target features can not contain ','}}256llvm.func @invalid_target_feature() attributes { target_features = #llvm.target_features<["+bad,feature", "+test"]> }257{258}259 260// -----261 262// expected-error @below{{target features must start with '+' or '-'}}263llvm.func @missing_target_feature_prefix() attributes { target_features = #llvm.target_features<["sme"]> }264{265}266 267// -----268 269// expected-error @below{{target features can not be null or empty}}270llvm.func @empty_target_feature() attributes { target_features = #llvm.target_features<["", "+sve"]> }271{272}273 274// -----275 276llvm.comdat @__llvm_comdat {277  llvm.comdat_selector @foo any278}279 280llvm.comdat @__llvm_comdat_1 {281  // expected-error @below{{comdat selection symbols must be unique even in different comdat regions}}282  llvm.comdat_selector @foo any283}284 285// -----286 287llvm.func @foo() {288  // expected-error @below{{must appear at the module level}}289  llvm.linker_options ["test"]290}291 292// -----293 294llvm.func @foo() {295  // expected-error @below{{must appear at the module level}}296  llvm.module_flags [#llvm.mlir.module_flag<error, "wchar_size", 4>]297}298 299// -----300 301module attributes {} {302  // expected-error @below{{expected a module flag attribute}}303  llvm.module_flags [4 : i32]304}305 306// -----307 308module @does_not_exist {309  // expected-error @below{{resource does not exist}}310  llvm.mlir.global internal constant @constant(dense_resource<test0> : tensor<4xf32>) : !llvm.array<4 x f32>311}312 313// -----314 315module @raw_data_does_not_match_element_type_size {316  // expected-error @below{{raw data size does not match element type size}}317  llvm.mlir.global internal constant @constant(dense_resource<test1> : tensor<5xf32>) : !llvm.array<4 x f32>318}319 320{-#321  dialect_resources: {322    builtin: {323      test1: "0x0800000054A3B53ED6C0B33E55D1A2BDE5D2BB3E"324    }325  }326#-}327 328// -----329 330module @does_not_exist {331  // expected-error @below{{unsupported dense_resource type}}332  llvm.mlir.global internal constant @constant(dense_resource<test1> : memref<4xf32>) : !llvm.array<4 x f32>333}334 335{-#336  dialect_resources: {337    builtin: {338      test1: "0x0800000054A3B53ED6C0B33E55D1A2BDE5D2BB3E"339    }340  }341#-}342 343// -----344 345module @no_known_conversion_innermost_eltype {346  // expected-error @below{{no known conversion for innermost element type}}347  llvm.mlir.global internal constant @constant(dense_resource<test0> : tensor<4xi4>) : !llvm.array<4 x i4>348}349 350{-#351  dialect_resources: {352    builtin: {353      test1: "0x0800000054A3B53ED6C0B33E55D1A2BDE5D2BB3E"354    }355  }356#-}357 358// -----359 360llvm.mlir.global external @zed(42 : i32) : i32361 362llvm.mlir.alias external @foo : i32 {363  %0 = llvm.mlir.addressof @zed : !llvm.ptr364  llvm.return %0 : !llvm.ptr365}366 367llvm.func @call_alias_func() {368  // expected-error @below{{'llvm.dso_local_equivalent' op must reference an alias to a function}}369  %0 = llvm.dso_local_equivalent @foo : !llvm.ptr370  llvm.call %0() : !llvm.ptr, () -> (i32)371  llvm.return372}373 374// -----375 376llvm.mlir.global external @y() : !llvm.ptr377 378llvm.func @call_alias_func() {379  // expected-error @below{{op must reference a global defined by 'llvm.func' or 'llvm.mlir.alias'}}380  %0 = llvm.dso_local_equivalent @y : !llvm.ptr381  llvm.call %0() : !llvm.ptr, () -> (i32)382  llvm.return383}384 385// -----386 387llvm.mlir.global external constant @const() {addr_space = 0 : i32, dso_local} : i32 {388  %0 = llvm.mlir.addressof @const : !llvm.ptr389  %1 = llvm.ptrtoint %0 : !llvm.ptr to i64390  // expected-error @below{{'llvm.dso_local_equivalent' op target function with 'extern_weak' linkage not allowed}}391  %2 = llvm.dso_local_equivalent @extern_func : !llvm.ptr392  %3 = llvm.ptrtoint %2 : !llvm.ptr to i64393  %4 = llvm.sub %3, %1 : i64394  %5 = llvm.trunc %4 : i64 to i32395  llvm.return %5 : i32396}397 398llvm.func extern_weak @extern_func()399 400// -----401 402llvm.func @invoke_branch_weights_callee()403llvm.func @__gxx_personality_v0(...) -> i32404 405llvm.func @invoke_branch_weights() -> i32 attributes {personality = @__gxx_personality_v0} {406  %0 = llvm.mlir.constant(1 : i32) : i32407  // expected-error @below{{expects number of branch weights to match number of successors: 1 vs 2}}408  llvm.invoke @invoke_branch_weights_callee() to ^bb2 unwind ^bb1 {branch_weights = array<i32 : 42>} : () -> ()409^bb1:  // pred: ^bb0410  %1 = llvm.landingpad cleanup : !llvm.struct<(ptr, i32)>411  llvm.br ^bb2412^bb2:  // 2 preds: ^bb0, ^bb1413  llvm.return %0 : i32414}415