diff options
Diffstat (limited to 'llvm/utils')
| -rw-r--r-- | llvm/utils/UpdateTestChecks/common.py | 1 | ||||
| -rw-r--r-- | llvm/utils/UpdateTestChecks/mir.py | 11 | ||||
| -rw-r--r-- | llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/bugprone/BUILD.gn | 1 | ||||
| -rw-r--r-- | llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/cert/BUILD.gn | 1 | ||||
| -rw-r--r-- | llvm/utils/profcheck-xfail.txt | 103 | ||||
| -rwxr-xr-x | llvm/utils/update_llc_test_checks.py | 94 |
6 files changed, 89 insertions, 122 deletions
diff --git a/llvm/utils/UpdateTestChecks/common.py b/llvm/utils/UpdateTestChecks/common.py index 2dad16a..baa0377 100644 --- a/llvm/utils/UpdateTestChecks/common.py +++ b/llvm/utils/UpdateTestChecks/common.py @@ -605,6 +605,7 @@ TRIPLE_IR_RE = re.compile(r'^\s*target\s+triple\s*=\s*"([^"]+)"$') TRIPLE_ARG_RE = re.compile(r"-m?triple[= ]([^ ]+)") MARCH_ARG_RE = re.compile(r"-march[= ]([^ ]+)") DEBUG_ONLY_ARG_RE = re.compile(r"-debug-only[= ]([^ ]+)") +STOP_PASS_RE = re.compile(r"-stop-(before|after)=(\w+)") IS_DEBUG_RECORD_RE = re.compile(r"^(\s+)#dbg_") IS_SWITCH_CASE_RE = re.compile(r"^\s+i\d+ \d+, label %\S+") diff --git a/llvm/utils/UpdateTestChecks/mir.py b/llvm/utils/UpdateTestChecks/mir.py index 24bb8b3..01ee0e1 100644 --- a/llvm/utils/UpdateTestChecks/mir.py +++ b/llvm/utils/UpdateTestChecks/mir.py @@ -163,13 +163,15 @@ def add_mir_checks_for_function( print_fixed_stack, first_check_is_next, at_the_function_name, + check_indent=None, ): printed_prefixes = set() for run in run_list: for prefix in run[0]: if prefix in printed_prefixes: break - if not func_dict[prefix][func_name]: + # func_info can be empty if there was a prefix conflict. + if not func_dict[prefix].get(func_name): continue if printed_prefixes: # Add some space between different check prefixes. @@ -185,6 +187,7 @@ def add_mir_checks_for_function( func_dict[prefix][func_name], print_fixed_stack, first_check_is_next, + check_indent, ) break else: @@ -204,6 +207,7 @@ def add_mir_check_lines( func_info, print_fixed_stack, first_check_is_next, + check_indent=None, ): func_body = str(func_info).splitlines() if single_bb: @@ -220,7 +224,10 @@ def add_mir_check_lines( first_line = func_body[0] indent = len(first_line) - len(first_line.lstrip(" ")) # A check comment, indented the appropriate amount - check = "{:>{}}; {}".format("", indent, prefix) + if check_indent is not None: + check = "{}; {}".format(check_indent, prefix) + else: + check = "{:>{}}; {}".format("", indent, prefix) output_lines.append("{}-LABEL: name: {}".format(check, func_name)) diff --git a/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/bugprone/BUILD.gn b/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/bugprone/BUILD.gn index 3c3fdf7..9c64db5 100644 --- a/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/bugprone/BUILD.gn +++ b/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/bugprone/BUILD.gn @@ -38,6 +38,7 @@ static_library("bugprone") { "EasilySwappableParametersCheck.cpp", "EmptyCatchCheck.cpp", "ExceptionEscapeCheck.cpp", + "FloatLoopCounterCheck.cpp", "FoldInitTypeCheck.cpp", "ForwardDeclarationNamespaceCheck.cpp", "ForwardingReferenceOverloadCheck.cpp", diff --git a/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/cert/BUILD.gn b/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/cert/BUILD.gn index 1eae289..16f914a 100644 --- a/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/cert/BUILD.gn +++ b/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/cert/BUILD.gn @@ -16,7 +16,6 @@ static_library("cert") { ] sources = [ "CERTTidyModule.cpp", - "FloatLoopCounter.cpp", "LimitedRandomnessCheck.cpp", "MutatingCopyCheck.cpp", "ProperlySeededRandomGeneratorCheck.cpp", diff --git a/llvm/utils/profcheck-xfail.txt b/llvm/utils/profcheck-xfail.txt index cd9512f..b1f20a7 100644 --- a/llvm/utils/profcheck-xfail.txt +++ b/llvm/utils/profcheck-xfail.txt @@ -1,8 +1,3 @@ -Analysis/LoopAccessAnalysis/memcheck-ni.ll -Analysis/MemorySSA/pr116227.ll -Analysis/MemorySSA/pr43641.ll -Analysis/MemorySSA/pr46574.ll -Analysis/MemorySSA/update-remove-dead-blocks.ll Bitcode/fcmp-fast.ll Bitcode/flags.ll CodeGen/AArch64/cgdata-merge-local.ll @@ -26,27 +21,12 @@ CodeGen/X86/nocfivalue.ll DebugInfo/AArch64/ir-outliner.ll DebugInfo/assignment-tracking/X86/hotcoldsplit.ll DebugInfo/Generic/block-asan.ll -DebugInfo/KeyInstructions/Generic/loop-unswitch.ll DebugInfo/X86/asan_debug_info.ll LTO/X86/diagnostic-handler-remarks-with-hotness.ll Other/optimization-remarks-auto.ll Other/X86/debugcounter-partiallyinlinelibcalls.ll -Transforms/AtomicExpand/AArch64/atomicrmw-fp.ll -Transforms/AtomicExpand/AArch64/expand-atomicrmw-xchg-fp.ll -Transforms/AtomicExpand/AArch64/pcsections.ll Transforms/AtomicExpand/ARM/atomic-expansion-v7.ll -Transforms/AtomicExpand/ARM/atomic-expansion-v8.ll -Transforms/AtomicExpand/ARM/atomicrmw-fp.ll -Transforms/AtomicExpand/Hexagon/atomicrmw-fp.ll -Transforms/AtomicExpand/LoongArch/atomicrmw-fp.ll -Transforms/AtomicExpand/Mips/atomicrmw-fp.ll -Transforms/AtomicExpand/PowerPC/atomicrmw-fp.ll -Transforms/AtomicExpand/RISCV/atomicrmw-fp.ll -Transforms/AtomicExpand/SPARC/libcalls.ll Transforms/AtomicExpand/SPARC/partword.ll -Transforms/AtomicExpand/X86/expand-atomic-rmw-fp.ll -Transforms/AtomicExpand/X86/expand-atomic-rmw-initial-load.ll -Transforms/AtomicExpand/X86/expand-atomic-xchg-fp.ll Transforms/Attributor/align.ll Transforms/Attributor/ArgumentPromotion/2008-02-01-ReturnAttrs.ll Transforms/Attributor/ArgumentPromotion/2008-07-02-array-indexing.ll @@ -265,14 +245,13 @@ Transforms/InstCombine/and2.ll Transforms/InstCombine/and-fcmp.ll Transforms/InstCombine/and.ll Transforms/InstCombine/and-or-icmps.ll -Transforms/InstCombine/and-or-implied-cond-not.ll Transforms/InstCombine/apint-div1.ll Transforms/InstCombine/apint-div2.ll Transforms/InstCombine/ashr-demand.ll Transforms/InstCombine/atomic.ll Transforms/InstCombine/binop-cast.ll -Transforms/InstCombine/binop-select.ll Transforms/InstCombine/binop-select-cast-of-select-cond.ll +Transforms/InstCombine/binop-select.ll Transforms/InstCombine/bit-checks.ll Transforms/InstCombine/bitreverse.ll Transforms/InstCombine/branch.ll @@ -298,7 +277,6 @@ Transforms/InstCombine/fold-ctpop-of-not.ll Transforms/InstCombine/fold-ext-eq-c-with-op.ll Transforms/InstCombine/free-inversion.ll Transforms/InstCombine/icmp-and-lowbit-mask.ll -Transforms/InstCombine/icmp-equality-test.ll Transforms/InstCombine/icmp.ll Transforms/InstCombine/icmp-mul-and.ll Transforms/InstCombine/icmp-of-and-x.ll @@ -307,7 +285,6 @@ Transforms/InstCombine/icmp-select-implies-common-op.ll Transforms/InstCombine/icmp-select.ll Transforms/InstCombine/icmp-with-selects.ll Transforms/InstCombine/intrinsic-select.ll -Transforms/InstCombine/known-never-nan.ll Transforms/InstCombine/ldexp-ext.ll Transforms/InstCombine/ldexp.ll Transforms/InstCombine/load-bitcast-select.ll @@ -347,13 +324,11 @@ Transforms/InstCombine/or.ll Transforms/InstCombine/pow-1.ll Transforms/InstCombine/pow-3.ll Transforms/InstCombine/pow-sqrt.ll -Transforms/InstCombine/pr24354.ll Transforms/InstCombine/pull-conditional-binop-through-shift.ll Transforms/InstCombine/rem.ll Transforms/InstCombine/sdiv-canonicalize.ll Transforms/InstCombine/sdiv-guard.ll Transforms/InstCombine/select-and-or.ll -Transforms/InstCombine/select-bitext.ll Transforms/InstCombine/select-cmp-br.ll Transforms/InstCombine/select-cmp.ll Transforms/InstCombine/select-factorize.ll @@ -362,7 +337,6 @@ Transforms/InstCombine/select.ll Transforms/InstCombine/select-min-max.ll Transforms/InstCombine/select-of-symmetric-selects.ll Transforms/InstCombine/select-select.ll -Transforms/InstCombine/select-with-extreme-eq-cond.ll Transforms/InstCombine/shift.ll Transforms/InstCombine/shuffle-select-narrow-inseltpoison.ll Transforms/InstCombine/shuffle-select-narrow.ll @@ -512,66 +486,12 @@ Transforms/LoopBoundSplit/bug51866.ll Transforms/LoopBoundSplit/bug-loop-bound-split-phi-in-exit-block.ll Transforms/LoopBoundSplit/loop-bound-split.ll Transforms/LoopDeletion/invalidate-scev-after-hoisting.ll -Transforms/LoopDistribute/basic-with-memchecks.ll -Transforms/LoopDistribute/bounds-expansion-bug.ll -Transforms/LoopDistribute/cross-partition-access.ll -Transforms/LoopDistribute/debug-loc.ll -Transforms/LoopDistribute/debug-print.ll -Transforms/LoopDistribute/diagnostics.ll -Transforms/LoopDistribute/followup.ll -Transforms/LoopDistribute/laa-invalidation.ll -Transforms/LoopDistribute/outside-use.ll -Transforms/LoopDistribute/pointer-phi-in-loop.ll -Transforms/LoopDistribute/scev-inserted-runtime-check.ll -Transforms/LoopDistribute/symbolic-stride.ll -Transforms/LoopFlatten/loop-flatten-version.ll Transforms/LoopIdiom/AArch64/byte-compare-index.ll Transforms/LoopIdiom/AArch64/find-first-byte.ll Transforms/LoopIdiom/RISCV/byte-compare-index.ll -Transforms/LoopIdiom/X86/arithmetic-right-shift-until-zero.ll -Transforms/LoopIdiom/X86/left-shift-until-bittest.ll -Transforms/LoopIdiom/X86/left-shift-until-zero.ll -Transforms/LoopIdiom/X86/logical-right-shift-until-zero-debuginfo.ll -Transforms/LoopIdiom/X86/logical-right-shift-until-zero.ll -Transforms/LoopLoadElim/forward.ll -Transforms/LoopLoadElim/invalidate-laa-after-versioning.ll -Transforms/LoopLoadElim/memcheck.ll -Transforms/LoopLoadElim/pr47457.ll -Transforms/LoopLoadElim/symbolic-stride.ll -Transforms/LoopLoadElim/unknown-stride-known-dep.ll -Transforms/LoopLoadElim/versioning-scev-invalidation.ll -Transforms/LoopPredication/preserve-bpi.ll -Transforms/LoopSimplifyCFG/constant-fold-branch.ll -Transforms/LoopSimplifyCFG/handle_dead_exits.ll -Transforms/LoopSimplifyCFG/invalidate-scev-dispositions-2.ll -Transforms/LoopSimplifyCFG/invalidate-scev-dispositions.ll -Transforms/LoopSimplifyCFG/lcssa.ll -Transforms/LoopSimplifyCFG/live_block_marking.ll -Transforms/LoopSimplifyCFG/mssa_update.ll -Transforms/LoopSimplifyCFG/pr117537.ll -Transforms/LoopSimplifyCFG/update_parents.ll Transforms/LoopUnroll/peel-last-iteration-expansion-cost.ll Transforms/LoopUnroll/peel-last-iteration-with-guards.ll Transforms/LoopUnroll/peel-last-iteration-with-variable-trip-count.ll -Transforms/LoopUnroll/runtime-loop-multiple-exits.ll -Transforms/LoopVersioning/add-phi-update-users.ll -Transforms/LoopVersioning/basic.ll -Transforms/LoopVersioning/bound-check-partially-known.ll -Transforms/LoopVersioning/crash-36998.ll -Transforms/LoopVersioning/exit-block-dominates-rt-check-block.ll -Transforms/LoopVersioning/incorrect-phi.ll -Transforms/LoopVersioning/invalidate-laa-after-versioning.ll -Transforms/LoopVersioning/lcssa.ll -Transforms/LoopVersioningLICM/load-from-unknown-address.ll -Transforms/LoopVersioningLICM/loopversioningLICM1.ll -Transforms/LoopVersioningLICM/loopversioningLICM2.ll -Transforms/LoopVersioningLICM/metadata.ll -Transforms/LoopVersioning/loop-invariant-bound.ll -Transforms/LoopVersioning/noalias.ll -Transforms/LoopVersioning/noalias-version-twice.ll -Transforms/LoopVersioning/single-iteration.ll -Transforms/LoopVersioning/wrapping-pointer-non-integral-addrspace.ll -Transforms/LoopVersioning/wrapping-pointer-versioning.ll Transforms/LowerAtomic/atomic-load.ll Transforms/LowerAtomic/atomic-swap.ll Transforms/LowerConstantIntrinsics/builtin-object-size-phi.ll @@ -740,27 +660,6 @@ Transforms/Scalarizer/scatter-order.ll Transforms/Scalarizer/variable-extractelement.ll Transforms/Scalarizer/variable-insertelement.ll Transforms/Scalarizer/vector-of-pointer-to-vector.ll -Transforms/SimpleLoopUnswitch/debuginfo.ll -Transforms/SimpleLoopUnswitch/delete-dead-blocks.ll -Transforms/SimpleLoopUnswitch/endless-unswitch.ll -Transforms/SimpleLoopUnswitch/guards.ll -Transforms/SimpleLoopUnswitch/inject-invariant-conditions-exponential.ll -Transforms/SimpleLoopUnswitch/inject-invariant-conditions.ll -Transforms/SimpleLoopUnswitch/LIV-loop-condtion.ll -Transforms/SimpleLoopUnswitch/nontrivial-unswitch-freeze.ll -Transforms/SimpleLoopUnswitch/nontrivial-unswitch.ll -Transforms/SimpleLoopUnswitch/nontrivial-unswitch-select.ll -Transforms/SimpleLoopUnswitch/nontrivial-unswitch-skip-selects-in-guards.ll -Transforms/SimpleLoopUnswitch/partial-unswitch.ll -Transforms/SimpleLoopUnswitch/partial-unswitch-loop-and-block-dispositions.ll -Transforms/SimpleLoopUnswitch/partial-unswitch-mssa-threshold.ll -Transforms/SimpleLoopUnswitch/partial-unswitch-update-memoryssa.ll -Transforms/SimpleLoopUnswitch/pr138509.ll -Transforms/SimpleLoopUnswitch/pr59546.ll -Transforms/SimpleLoopUnswitch/pr60736.ll -Transforms/SimpleLoopUnswitch/trivial-unswitch-freeze-individual-conditions.ll -Transforms/SimpleLoopUnswitch/trivial-unswitch.ll -Transforms/SimpleLoopUnswitch/trivial-unswitch-logical-and-or.ll Transforms/StackProtector/cross-dso-cfi-stack-chk-fail.ll Transforms/StructurizeCFG/callbr.ll Transforms/StructurizeCFG/hoist-zerocost.ll diff --git a/llvm/utils/update_llc_test_checks.py b/llvm/utils/update_llc_test_checks.py index 8c57e75..98864be 100755 --- a/llvm/utils/update_llc_test_checks.py +++ b/llvm/utils/update_llc_test_checks.py @@ -15,7 +15,7 @@ import argparse import os # Used to advertise this file's name ("autogenerated_note"). import sys -from UpdateTestChecks import common +from UpdateTestChecks import common, mir # llc is the only llc-like in the LLVM tree but downstream forks can add # additional ones here if they have them. @@ -33,6 +33,7 @@ def update_test(ti: common.TestInfo): break run_list = [] + mir_run_list = [] for l in ti.run_lines: if "|" not in l: common.warn("Skipping unparsable RUN line: " + l) @@ -57,9 +58,14 @@ def update_test(ti: common.TestInfo): if m: march_in_cmd = m.groups()[0] + target_list = run_list m = common.DEBUG_ONLY_ARG_RE.search(llc_cmd) if m and m.groups()[0] == "isel": from UpdateTestChecks import isel as output_type + elif not m and common.STOP_PASS_RE.search(llc_cmd): + # MIR output mode. If -debug-only is present assume + # the debug output is the main point of interest. + target_list = mir_run_list else: from UpdateTestChecks import asm as output_type @@ -84,7 +90,7 @@ def update_test(ti: common.TestInfo): # FIXME: We should use multiple check prefixes to common check lines. For # now, we just ignore all but the last. - run_list.append( + target_list.append( ( check_prefixes, llc_tool, @@ -119,14 +125,20 @@ def update_test(ti: common.TestInfo): ginfo=ginfo, ) - for ( - prefixes, - llc_tool, - llc_args, - preprocess_cmd, - triple_in_cmd, - march_in_cmd, - ) in run_list: + # Dictionary to store MIR function bodies separately + mir_func_dict = {} + for run_tuple, is_mir in [(run, False) for run in run_list] + [ + (run, True) for run in mir_run_list + ]: + ( + prefixes, + llc_tool, + llc_args, + preprocess_cmd, + triple_in_cmd, + march_in_cmd, + ) = run_tuple + common.debug("Extracted LLC cmd:", llc_tool, llc_args) common.debug("Extracted FileCheck prefixes:", str(prefixes)) @@ -141,22 +153,54 @@ def update_test(ti: common.TestInfo): if not triple: triple = common.get_triple_from_march(march_in_cmd) - scrubber, function_re = output_type.get_run_handler(triple) - if 0 == builder.process_run_line( - function_re, scrubber, raw_tool_output, prefixes - ): - common.warn( - "Couldn't match any function. Possibly the wrong target triple has been provided" + if is_mir: + # MIR output mode + common.debug("Detected MIR output mode for prefixes:", str(prefixes)) + for prefix in prefixes: + if prefix not in mir_func_dict: + mir_func_dict[prefix] = {} + + mir.build_function_info_dictionary( + ti.path, + raw_tool_output, + triple, + prefixes, + mir_func_dict, + ti.args.verbose, ) - builder.processed_prefixes(prefixes) + else: + # ASM output mode + scrubber, function_re = output_type.get_run_handler(triple) + if 0 == builder.process_run_line( + function_re, scrubber, raw_tool_output, prefixes + ): + common.warn( + "Couldn't match any function. Possibly the wrong target triple has been provided" + ) + builder.processed_prefixes(prefixes) func_dict = builder.finish_and_get_func_dict() + + # Check for conflicts: same prefix used for both ASM and MIR + conflicting_prefixes = set(func_dict.keys()) & set(mir_func_dict.keys()) + if conflicting_prefixes: + common.warn( + "The following prefixes are used for both ASM and MIR output, which will cause FileCheck failures: {}".format( + ", ".join(sorted(conflicting_prefixes)) + ), + test_file=ti.path, + ) + for prefix in conflicting_prefixes: + mir_func_dict[prefix] = {} + func_dict[prefix] = {} + global_vars_seen_dict = {} is_in_function = False is_in_function_start = False func_name = None prefix_set = set([prefix for p in run_list for prefix in p[0]]) + prefix_set.update([prefix for p in mir_run_list for prefix in p[0]]) common.debug("Rewriting FileCheck prefixes:", str(prefix_set)) output_lines = [] @@ -221,6 +265,22 @@ def update_test(ti: common.TestInfo): is_filtered=builder.is_filtered(), ) ) + + # Also add MIR checks if we have them for this function + if mir_run_list and func_name: + mir.add_mir_checks_for_function( + ti.path, + output_lines, + mir_run_list, + mir_func_dict, + func_name, + single_bb=False, # Don't skip basic block labels. + print_fixed_stack=False, # Don't print fixed stack (ASM tests don't need it). + first_check_is_next=False, # First check is LABEL, not NEXT. + at_the_function_name=False, # Use "name:" not "@name". + check_indent="", # No indentation for IR files (not MIR files). + ) + is_in_function_start = False if is_in_function: |
