From 3206b8e596cedaa6cf00532b21f609649179908f Mon Sep 17 00:00:00 2001 From: huitailangzju <804544223@qq.com> Date: Mon, 27 Feb 2023 10:00:05 +0800 Subject: [PATCH 1/6] [Pin-gcc-client] BugFix for SwitchOp, change it to terminator operation diff --git a/include/Dialect/PluginOps.td b/include/Dialect/PluginOps.td index 0b5a138..71a1441 100644 --- a/include/Dialect/PluginOps.td +++ b/include/Dialect/PluginOps.td @@ -484,29 +484,6 @@ def AsmOp : Plugin_Op<"asm", [NoSideEffect]> { }]; } -def SwitchOp : Plugin_Op<"switch", [NoSideEffect]> { - let summary = "switch op."; - let description = [{TODO}]; - let successors = (successor - AnySuccessor:$defaultDestination, - VariadicSuccessor:$caseDestinations - ); - let arguments = (ins UI64Attr:$id, AnyType:$index, UI64Attr:$address, AnyType:$defaultLabel, Variadic:$operands, - UI64Attr:$defaultaddr, ArrayAttr:$caseaddrs); - let results = (outs AnyType:$result); - let builders = [ - OpBuilderDAG<(ins "uint64_t":$id, "Value":$index, "uint64_t":$address, "Value":$defaultLabel, - "ArrayRef":$operands, "Block*":$defaultDestination, "uint64_t":$defaultaddr, - "ArrayRef":$caseDestinations, "ArrayRef":$caseaddrs)> - ]; - - let extraClassDeclaration = [{ - unsigned GetNumLabels() { return getNumOperands() - 2; }; - Block* GetDefautDest() { return defaultDestination();} - SmallVector GetCaseDest() { return caseDestinations(); }; - }]; -} - def LabelOp : Plugin_Op<"label", [NoSideEffect]> { let summary = "Label op."; let description = [{TODO}]; @@ -575,6 +552,29 @@ def CatchOp : Plugin_Op<"catch", [NoSideEffect]> { class Plugin_TerminatorOp traits = []> : Plugin_Op; +def SwitchOp : Plugin_TerminatorOp<"switch", [NoSideEffect]> { + let summary = "switch op."; + let description = [{TODO}]; + let successors = (successor + AnySuccessor:$defaultDestination, + VariadicSuccessor:$caseDestinations + ); + let arguments = (ins UI64Attr:$id, AnyType:$index, UI64Attr:$address, AnyType:$defaultLabel, Variadic:$operands, + UI64Attr:$defaultaddr, ArrayAttr:$caseaddrs); + let results = (outs AnyType:$result); + let builders = [ + OpBuilderDAG<(ins "uint64_t":$id, "Value":$index, "uint64_t":$address, "Value":$defaultLabel, + "ArrayRef":$operands, "Block*":$defaultDestination, "uint64_t":$defaultaddr, + "ArrayRef":$caseDestinations, "ArrayRef":$caseaddrs)> + ]; + + let extraClassDeclaration = [{ + unsigned GetNumLabels() { return getNumOperands() - 2; }; + Block* GetDefautDest() { return defaultDestination();} + SmallVector GetCaseDest() { return caseDestinations(); }; + }]; +} + def FallThroughOp : Plugin_TerminatorOp<"fallthrough", [NoSideEffect]> { let summary = "FallThroughOp"; let description = [{TODO}]; -- 2.33.0