brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.5 KiB · 0f2cf19 Raw
706 lines · plain
1// RUN: mlir-opt -test-spirv-module-combiner -split-input-file -verify-diagnostics %s | FileCheck %s2 3// Test basic renaming of conflicting funcOps.4 5// CHECK:      module {6// CHECK-NEXT:   spirv.module Logical GLSL450 {7// CHECK-NEXT:     spirv.func @foo8// CHECK-NEXT:       spirv.ReturnValue9// CHECK-NEXT:     }10 11// CHECK-NEXT:     spirv.func @foo_112// CHECK-NEXT:       spirv.ReturnValue13// CHECK-NEXT:     }14// CHECK-NEXT:   }15// CHECK-NEXT: }16 17module {18spirv.module Logical GLSL450 {19  spirv.func @foo(%arg0 : i32) -> i32 "None" {20    spirv.ReturnValue %arg0 : i3221  }22}23 24spirv.module Logical GLSL450 {25  spirv.func @foo(%arg0 : f32) -> f32 "None" {26    spirv.ReturnValue %arg0 : f3227  }28}29}30 31// -----32 33// Test basic renaming of conflicting funcOps across 3 modules.34 35// CHECK:      module {36// CHECK-NEXT:   spirv.module Logical GLSL450 {37// CHECK-NEXT:     spirv.func @foo38// CHECK-NEXT:       spirv.ReturnValue39// CHECK-NEXT:     }40 41// CHECK-NEXT:     spirv.func @foo_142// CHECK-NEXT:       spirv.FAdd43// CHECK-NEXT:       spirv.ReturnValue44// CHECK-NEXT:     }45 46// CHECK-NEXT:     spirv.func @foo_247// CHECK-NEXT:       spirv.ISub48// CHECK-NEXT:       spirv.ReturnValue49// CHECK-NEXT:     }50// CHECK-NEXT:   }51// CHECK-NEXT: }52 53module {54spirv.module Logical GLSL450 {55  spirv.func @foo(%arg0 : i32) -> i32 "None" {56    spirv.ReturnValue %arg0 : i3257  }58}59 60spirv.module Logical GLSL450 {61  spirv.func @foo(%arg0 : f32) -> f32 "None" {62    %0 = spirv.FAdd %arg0, %arg0 : f3263    spirv.ReturnValue %0 : f3264  }65}66 67spirv.module Logical GLSL450 {68  spirv.func @foo(%arg0 : i32) -> i32 "None" {69    %0 = spirv.ISub %arg0, %arg0 : i3270    spirv.ReturnValue %0 : i3271  }72}73}74 75// -----76 77// Test properly updating references to a renamed funcOp.78 79// CHECK:      module {80// CHECK-NEXT:   spirv.module Logical GLSL450 {81// CHECK-NEXT:     spirv.func @foo82// CHECK-NEXT:       spirv.ReturnValue83// CHECK-NEXT:     }84 85// CHECK-NEXT:     spirv.func @foo_186// CHECK-NEXT:       spirv.ReturnValue87// CHECK-NEXT:     }88 89// CHECK-NEXT:     spirv.func @bar90// CHECK-NEXT:       spirv.FunctionCall @foo_191// CHECK-NEXT:       spirv.ReturnValue92// CHECK-NEXT:     }93// CHECK-NEXT:   }94// CHECK-NEXT: }95 96module {97spirv.module Logical GLSL450 {98  spirv.func @foo(%arg0 : i32) -> i32 "None" {99    spirv.ReturnValue %arg0 : i32100  }101}102 103spirv.module Logical GLSL450 {104  spirv.func @foo(%arg0 : f32) -> f32 "None" {105    spirv.ReturnValue %arg0 : f32106  }107 108  spirv.func @bar(%arg0 : f32) -> f32 "None" {109    %0 = spirv.FunctionCall @foo(%arg0) : (f32) ->  (f32)110    spirv.ReturnValue %0 : f32111  }112}113}114 115// -----116 117// Test properly updating references to a renamed funcOp if the functionCallOp118// preceeds the callee funcOp definition.119 120// CHECK:      module {121// CHECK-NEXT:   spirv.module Logical GLSL450 {122// CHECK-NEXT:     spirv.func @foo123// CHECK-NEXT:       spirv.ReturnValue124// CHECK-NEXT:     }125 126// CHECK-NEXT:     spirv.func @bar127// CHECK-NEXT:       spirv.FunctionCall @foo_1128// CHECK-NEXT:       spirv.ReturnValue129// CHECK-NEXT:     }130 131// CHECK-NEXT:     spirv.func @foo_1132// CHECK-NEXT:       spirv.ReturnValue133// CHECK-NEXT:     }134// CHECK-NEXT:   }135// CHECK-NEXT: }136 137module {138spirv.module Logical GLSL450 {139  spirv.func @foo(%arg0 : i32) -> i32 "None" {140    spirv.ReturnValue %arg0 : i32141  }142}143 144spirv.module Logical GLSL450 {145  spirv.func @bar(%arg0 : f32) -> f32 "None" {146    %0 = spirv.FunctionCall @foo(%arg0) : (f32) ->  (f32)147    spirv.ReturnValue %0 : f32148  }149 150  spirv.func @foo(%arg0 : f32) -> f32 "None" {151    spirv.ReturnValue %arg0 : f32152  }153}154}155 156// -----157 158// Test properly updating entryPointOp and executionModeOp attached to renamed159// funcOp.160 161// CHECK:      module {162// CHECK-NEXT:   spirv.module Logical GLSL450 {163// CHECK-NEXT:     spirv.func @foo164// CHECK-NEXT:       spirv.ReturnValue165// CHECK-NEXT:     }166 167// CHECK-NEXT:     spirv.func @foo_1168// CHECK-NEXT:       spirv.ReturnValue169// CHECK-NEXT:     }170 171// CHECK-NEXT:     spirv.EntryPoint "GLCompute" @foo_1172// CHECK-NEXT:     spirv.ExecutionMode @foo_1 "ContractionOff"173// CHECK-NEXT:   }174// CHECK-NEXT: }175 176module {177spirv.module Logical GLSL450 {178  spirv.func @foo(%arg0 : i32) -> i32 "None" {179    spirv.ReturnValue %arg0 : i32180  }181}182 183spirv.module Logical GLSL450 {184  spirv.func @foo(%arg0 : f32) -> f32 "None" {185    spirv.ReturnValue %arg0 : f32186  }187 188  spirv.EntryPoint "GLCompute" @foo189  spirv.ExecutionMode @foo "ContractionOff"190}191}192 193// -----194 195// CHECK:      module {196// CHECK-NEXT:   spirv.module Logical GLSL450 {197// CHECK-NEXT:     spirv.func @foo198// CHECK-NEXT:       spirv.ReturnValue199// CHECK-NEXT:     }200 201// CHECK-NEXT:     spirv.EntryPoint "GLCompute" @fo202// CHECK-NEXT:     spirv.ExecutionMode @foo "ContractionOff"203 204// CHECK-NEXT:     spirv.func @foo_1205// CHECK-NEXT:       spirv.ReturnValue206// CHECK-NEXT:     }207 208// CHECK-NEXT:     spirv.EntryPoint "GLCompute" @foo_1209// CHECK-NEXT:     spirv.ExecutionMode @foo_1 "ContractionOff"210// CHECK-NEXT:   }211// CHECK-NEXT: }212 213module {214spirv.module Logical GLSL450 {215  spirv.func @foo(%arg0 : i32) -> i32 "None" {216    spirv.ReturnValue %arg0 : i32217  }218 219  spirv.EntryPoint "GLCompute" @foo220  spirv.ExecutionMode @foo "ContractionOff"221}222 223spirv.module Logical GLSL450 {224  spirv.func @foo(%arg0 : f32) -> f32 "None" {225    spirv.ReturnValue %arg0 : f32226  }227 228  spirv.EntryPoint "GLCompute" @foo229  spirv.ExecutionMode @foo "ContractionOff"230}231}232 233// -----234 235// Resolve conflicting funcOp and globalVariableOp.236 237// CHECK:      module {238// CHECK-NEXT:   spirv.module Logical GLSL450 {239// CHECK-NEXT:     spirv.func @foo240// CHECK-NEXT:       spirv.ReturnValue241// CHECK-NEXT:     }242 243// CHECK-NEXT:     spirv.GlobalVariable @foo_1244// CHECK-NEXT: }245 246module {247spirv.module Logical GLSL450 {248  spirv.func @foo(%arg0 : i32) -> i32 "None" {249    spirv.ReturnValue %arg0 : i32250  }251}252 253spirv.module Logical GLSL450 {254  spirv.GlobalVariable @foo bind(1, 0) : !spirv.ptr<f32, Input>255}256}257 258// -----259 260// Resolve conflicting funcOp and globalVariableOp and update the global variable's261// references.262 263// CHECK:      module {264// CHECK-NEXT:   spirv.module Logical GLSL450 {265// CHECK-NEXT:     spirv.func @foo266// CHECK-NEXT:       spirv.ReturnValue267// CHECK-NEXT:     }268 269// CHECK-NEXT:     spirv.GlobalVariable @foo_1270// CHECK-NEXT:     spirv.func @bar271// CHECK-NEXT:       spirv.mlir.addressof @foo_1272// CHECK-NEXT:       spirv.Load273// CHECK-NEXT:       spirv.ReturnValue274// CHECK-NEXT:     }275// CHECK-NEXT: }276 277module {278spirv.module Logical GLSL450 {279  spirv.func @foo(%arg0 : i32) -> i32 "None" {280    spirv.ReturnValue %arg0 : i32281  }282}283 284spirv.module Logical GLSL450 {285  spirv.GlobalVariable @foo bind(1, 0) : !spirv.ptr<f32, Input>286 287  spirv.func @bar() -> f32 "None" {288    %0 = spirv.mlir.addressof @foo : !spirv.ptr<f32, Input>289    %1 = spirv.Load "Input" %0 : f32290    spirv.ReturnValue %1 : f32291  }292}293}294 295// -----296 297// Resolve conflicting globalVariableOp and funcOp and update the global variable's298// references.299 300// CHECK:      module {301// CHECK-NEXT:   spirv.module Logical GLSL450 {302// CHECK-NEXT:     spirv.GlobalVariable @foo_1303// CHECK-NEXT:     spirv.func @bar304// CHECK-NEXT:       spirv.mlir.addressof @foo_1305// CHECK-NEXT:       spirv.Load306// CHECK-NEXT:       spirv.ReturnValue307// CHECK-NEXT:     }308 309// CHECK-NEXT:     spirv.func @foo310// CHECK-NEXT:       spirv.ReturnValue311// CHECK-NEXT:     }312// CHECK-NEXT: }313 314module {315spirv.module Logical GLSL450 {316  spirv.GlobalVariable @foo bind(1, 0) : !spirv.ptr<f32, Input>317 318  spirv.func @bar() -> f32 "None" {319    %0 = spirv.mlir.addressof @foo : !spirv.ptr<f32, Input>320    %1 = spirv.Load "Input" %0 : f32321    spirv.ReturnValue %1 : f32322  }323}324 325spirv.module Logical GLSL450 {326  spirv.func @foo(%arg0 : i32) -> i32 "None" {327    spirv.ReturnValue %arg0 : i32328  }329}330}331 332// -----333 334// Resolve conflicting funcOp and specConstantOp.335 336// CHECK:      module {337// CHECK-NEXT:   spirv.module Logical GLSL450 {338// CHECK-NEXT:     spirv.func @foo339// CHECK-NEXT:       spirv.ReturnValue340// CHECK-NEXT:     }341 342// CHECK-NEXT:     spirv.SpecConstant @foo_1343// CHECK-NEXT: }344 345module {346spirv.module Logical GLSL450 {347  spirv.func @foo(%arg0 : i32) -> i32 "None" {348    spirv.ReturnValue %arg0 : i32349  }350}351 352spirv.module Logical GLSL450 {353  spirv.SpecConstant @foo = -5 : i32354}355}356 357// -----358 359// Resolve conflicting funcOp and specConstantOp and update the spec constant's360// references.361 362// CHECK:      module {363// CHECK-NEXT:   spirv.module Logical GLSL450 {364// CHECK-NEXT:     spirv.func @foo365// CHECK-NEXT:       spirv.ReturnValue366// CHECK-NEXT:     }367 368// CHECK-NEXT:     spirv.SpecConstant @foo_1369// CHECK-NEXT:     spirv.func @bar370// CHECK-NEXT:       spirv.mlir.referenceof @foo_1371// CHECK-NEXT:       spirv.ReturnValue372// CHECK-NEXT:     }373// CHECK-NEXT: }374 375module {376spirv.module Logical GLSL450 {377  spirv.func @foo(%arg0 : i32) -> i32 "None" {378    spirv.ReturnValue %arg0 : i32379  }380}381 382spirv.module Logical GLSL450 {383  spirv.SpecConstant @foo = -5 : i32384 385  spirv.func @bar() -> i32 "None" {386    %0 = spirv.mlir.referenceof @foo : i32387    spirv.ReturnValue %0 : i32388  }389}390}391 392// -----393 394// Resolve conflicting specConstantOp and funcOp and update the spec constant's395// references.396 397// CHECK:      module {398// CHECK-NEXT:   spirv.module Logical GLSL450 {399// CHECK-NEXT:     spirv.SpecConstant @foo_1400// CHECK-NEXT:     spirv.func @bar401// CHECK-NEXT:       spirv.mlir.referenceof @foo_1402// CHECK-NEXT:       spirv.ReturnValue403// CHECK-NEXT:     }404 405// CHECK-NEXT:     spirv.func @foo406// CHECK-NEXT:       spirv.ReturnValue407// CHECK-NEXT:     }408// CHECK-NEXT: }409 410module {411spirv.module Logical GLSL450 {412  spirv.SpecConstant @foo = -5 : i32413 414  spirv.func @bar() -> i32 "None" {415    %0 = spirv.mlir.referenceof @foo : i32416    spirv.ReturnValue %0 : i32417  }418}419 420spirv.module Logical GLSL450 {421  spirv.func @foo(%arg0 : i32) -> i32 "None" {422    spirv.ReturnValue %arg0 : i32423  }424}425}426 427// -----428 429// Resolve conflicting funcOp and specConstantCompositeOp.430 431// CHECK:      module {432// CHECK-NEXT:   spirv.module Logical GLSL450 {433// CHECK-NEXT:     spirv.func @foo434// CHECK-NEXT:       spirv.ReturnValue435// CHECK-NEXT:     }436 437// CHECK-NEXT:     spirv.SpecConstant @bar438// CHECK-NEXT:     spirv.SpecConstantComposite @foo_1 (@bar, @bar)439// CHECK-NEXT: }440 441module {442spirv.module Logical GLSL450 {443  spirv.func @foo(%arg0 : i32) -> i32 "None" {444    spirv.ReturnValue %arg0 : i32445  }446}447 448spirv.module Logical GLSL450 {449  spirv.SpecConstant @bar = -5 : i32450  spirv.SpecConstantComposite @foo (@bar, @bar) : !spirv.array<2 x i32>451}452}453 454// -----455 456// Resolve conflicting funcOp and specConstantCompositeOp and update the spec457// constant's references.458 459// CHECK:      module {460// CHECK-NEXT:   spirv.module Logical GLSL450 {461// CHECK-NEXT:     spirv.func @foo462// CHECK-NEXT:       spirv.ReturnValue463// CHECK-NEXT:     }464 465// CHECK-NEXT:     spirv.SpecConstant @bar466// CHECK-NEXT:     spirv.SpecConstantComposite @foo_1 (@bar, @bar)467// CHECK-NEXT:     spirv.func @baz468// CHECK-NEXT:       spirv.mlir.referenceof @foo_1469// CHECK-NEXT:       spirv.CompositeExtract470// CHECK-NEXT:       spirv.ReturnValue471// CHECK-NEXT:     }472// CHECK-NEXT: }473 474module {475spirv.module Logical GLSL450 {476  spirv.func @foo(%arg0 : i32) -> i32 "None" {477    spirv.ReturnValue %arg0 : i32478  }479}480 481spirv.module Logical GLSL450 {482  spirv.SpecConstant @bar = -5 : i32483  spirv.SpecConstantComposite @foo (@bar, @bar) : !spirv.array<2 x i32>484 485  spirv.func @baz() -> i32 "None" {486    %0 = spirv.mlir.referenceof @foo : !spirv.array<2 x i32>487    %1 = spirv.CompositeExtract %0[0 : i32] : !spirv.array<2 x i32>488    spirv.ReturnValue %1 : i32489  }490}491}492 493// -----494 495// Resolve conflicting specConstantCompositeOp and funcOp and update the spec496// constant's references.497 498// CHECK:      module {499// CHECK-NEXT:   spirv.module Logical GLSL450 {500// CHECK-NEXT:     spirv.SpecConstant @bar501// CHECK-NEXT:     spirv.SpecConstantComposite @foo_1 (@bar, @bar)502// CHECK-NEXT:     spirv.func @baz503// CHECK-NEXT:       spirv.mlir.referenceof @foo_1504// CHECK-NEXT:       spirv.CompositeExtract505// CHECK-NEXT:       spirv.ReturnValue506// CHECK-NEXT:     }507 508// CHECK-NEXT:     spirv.func @foo509// CHECK-NEXT:       spirv.ReturnValue510// CHECK-NEXT:     }511// CHECK-NEXT: }512 513module {514spirv.module Logical GLSL450 {515  spirv.SpecConstant @bar = -5 : i32516  spirv.SpecConstantComposite @foo (@bar, @bar) : !spirv.array<2 x i32>517 518  spirv.func @baz() -> i32 "None" {519    %0 = spirv.mlir.referenceof @foo : !spirv.array<2 x i32>520    %1 = spirv.CompositeExtract %0[0 : i32] : !spirv.array<2 x i32>521    spirv.ReturnValue %1 : i32522  }523}524 525spirv.module Logical GLSL450 {526  spirv.func @foo(%arg0 : i32) -> i32 "None" {527    spirv.ReturnValue %arg0 : i32528  }529}530}531 532// -----533 534// Resolve conflicting spec constants and funcOps and update the spec constant's535// references.536 537// CHECK:      module {538// CHECK-NEXT:   spirv.module Logical GLSL450 {539// CHECK-NEXT:     spirv.SpecConstant @bar_1540// CHECK-NEXT:     spirv.SpecConstantComposite @foo_2 (@bar_1, @bar_1)541// CHECK-NEXT:     spirv.func @baz542// CHECK-NEXT:       spirv.mlir.referenceof @foo_2543// CHECK-NEXT:       spirv.CompositeExtract544// CHECK-NEXT:       spirv.ReturnValue545// CHECK-NEXT:     }546 547// CHECK-NEXT:     spirv.func @foo548// CHECK-NEXT:       spirv.ReturnValue549// CHECK-NEXT:     }550 551// CHECK-NEXT:     spirv.func @bar552// CHECK-NEXT:       spirv.ReturnValue553// CHECK-NEXT:     }554// CHECK-NEXT: }555 556module {557spirv.module Logical GLSL450 {558  spirv.SpecConstant @bar = -5 : i32559  spirv.SpecConstantComposite @foo (@bar, @bar) : !spirv.array<2 x i32>560 561  spirv.func @baz() -> i32 "None" {562    %0 = spirv.mlir.referenceof @foo : !spirv.array<2 x i32>563    %1 = spirv.CompositeExtract %0[0 : i32] : !spirv.array<2 x i32>564    spirv.ReturnValue %1 : i32565  }566}567 568spirv.module Logical GLSL450 {569  spirv.func @foo(%arg0 : i32) -> i32 "None" {570    spirv.ReturnValue %arg0 : i32571  }572 573  spirv.func @bar(%arg0 : f32) -> f32 "None" {574    spirv.ReturnValue %arg0 : f32575  }576}577}578 579// -----580 581// Resolve conflicting globalVariableOps.582 583// CHECK:      module {584// CHECK-NEXT:   spirv.module Logical GLSL450 {585// CHECK-NEXT:     spirv.GlobalVariable @foo_1 bind(1, 0)586 587// CHECK-NEXT:     spirv.GlobalVariable @foo bind(2, 0)588// CHECK-NEXT: }589 590module {591spirv.module Logical GLSL450 {592  spirv.GlobalVariable @foo bind(1, 0) : !spirv.ptr<f32, Input>593}594 595spirv.module Logical GLSL450 {596  spirv.GlobalVariable @foo bind(2, 0) : !spirv.ptr<f32, Input>597}598}599 600// -----601 602// CHECK:      module {603// CHECK-NEXT:   spirv.module Logical GLSL450 {604// CHECK-NEXT:     spirv.GlobalVariable @foo_1 built_in("GlobalInvocationId")605 606// CHECK-NEXT:     spirv.GlobalVariable @foo built_in("LocalInvocationId")607// CHECK-NEXT: }608 609module {610spirv.module Logical GLSL450 {611  spirv.GlobalVariable @foo built_in("GlobalInvocationId") : !spirv.ptr<vector<3xi32>, Input>612}613 614spirv.module Logical GLSL450 {615  spirv.GlobalVariable @foo built_in("LocalInvocationId") : !spirv.ptr<vector<3xi32>, Input>616}617}618 619// -----620 621// Resolve conflicting globalVariableOp and specConstantOp.622 623// CHECK:      module {624// CHECK-NEXT:   spirv.module Logical GLSL450 {625// CHECK-NEXT:     spirv.GlobalVariable @foo_1626 627// CHECK-NEXT:     spirv.SpecConstant @foo628// CHECK-NEXT: }629 630module {631spirv.module Logical GLSL450 {632  spirv.GlobalVariable @foo bind(1, 0) : !spirv.ptr<f32, Input>633}634 635spirv.module Logical GLSL450 {636  spirv.SpecConstant @foo = -5 : i32637}638}639 640// -----641 642// Resolve conflicting specConstantOp and globalVariableOp.643 644// CHECK:      module {645// CHECK-NEXT:   spirv.module Logical GLSL450 {646// CHECK-NEXT:     spirv.SpecConstant @foo_1647 648// CHECK-NEXT:     spirv.GlobalVariable @foo649// CHECK-NEXT: }650 651module {652spirv.module Logical GLSL450 {653  spirv.SpecConstant @foo = -5 : i32654}655 656spirv.module Logical GLSL450 {657  spirv.GlobalVariable @foo bind(1, 0) : !spirv.ptr<f32, Input>658}659}660 661// -----662 663// Resolve conflicting globalVariableOp and specConstantCompositeOp.664 665// CHECK:      module {666// CHECK-NEXT:   spirv.module Logical GLSL450 {667// CHECK-NEXT:     spirv.GlobalVariable @foo_1668 669// CHECK-NEXT:     spirv.SpecConstant @bar670// CHECK-NEXT:     spirv.SpecConstantComposite @foo (@bar, @bar)671// CHECK-NEXT: }672 673module {674spirv.module Logical GLSL450 {675  spirv.GlobalVariable @foo bind(1, 0) : !spirv.ptr<f32, Input>676}677 678spirv.module Logical GLSL450 {679  spirv.SpecConstant @bar = -5 : i32680  spirv.SpecConstantComposite @foo (@bar, @bar) : !spirv.array<2 x i32>681}682}683 684// -----685 686// Resolve conflicting globalVariableOp and specConstantComposite.687 688// CHECK:      module {689// CHECK-NEXT:   spirv.module Logical GLSL450 {690// CHECK-NEXT:     spirv.SpecConstant @bar691// CHECK-NEXT:     spirv.SpecConstantComposite @foo_1 (@bar, @bar)692 693// CHECK-NEXT:     spirv.GlobalVariable @foo694// CHECK-NEXT: }695 696module {697spirv.module Logical GLSL450 {698  spirv.SpecConstant @bar = -5 : i32699  spirv.SpecConstantComposite @foo (@bar, @bar) : !spirv.array<2 x i32>700}701 702spirv.module Logical GLSL450 {703  spirv.GlobalVariable @foo bind(1, 0) : !spirv.ptr<f32, Input>704}705}706