This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC] Test coverage for --param boundary values


Hello.

As I already briefly discussed my attempt with Jakub, it would be interesting to provide
compile tests that would cover boundary values of params.
That revealed e.g. PR rtl-optimization/71634 and many similar.

The crucial part of the patch is selection of a proper source file that would expose boundary
values. Second question is what optimization level to pick up as a base level.

My initial attempt is nanojpeg ([1]), which is a single file implementation of JPEG compression/decompression
algorithm. Well, testing all boundary values takes 3m20s on i7 machine (it's single-threaded) and it introduces
232 new PASSes.

Thoughts?
Thanks,
Martin

[1] http://keyj.emphy.de/nanojpeg/

>From 65e04c1a71451218777cfade499ffcdca5f8313f Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Fri, 8 Jul 2016 10:59:24 +0200
Subject: [PATCH] Add tests that test boundary values of params

gcc/testsuite/ChangeLog:

2016-07-08  Martin Liska  <mliska@suse.cz>

	* gcc.dg/params/nanojpeg.h: New test.
	* gcc.dg/params/param-boundary-align-loop-iterations-0.c: New test.
	* gcc.dg/params/param-boundary-align-threshold-1.c: New test.
	* gcc.dg/params/param-boundary-allow-store-data-races-0.c: New test.
	* gcc.dg/params/param-boundary-allow-store-data-races-1.c: New test.
	* gcc.dg/params/param-boundary-asan-globals-0.c: New test.
	* gcc.dg/params/param-boundary-asan-globals-1.c: New test.
	* gcc.dg/params/param-boundary-asan-instrument-reads-0.c: New test.
	* gcc.dg/params/param-boundary-asan-instrument-reads-1.c: New test.
	* gcc.dg/params/param-boundary-asan-instrument-writes-0.c: New test.
	* gcc.dg/params/param-boundary-asan-instrument-writes-1.c: New test.
	* gcc.dg/params/param-boundary-asan-instrumentation-with-call-threshold-0.c: New test.
	* gcc.dg/params/param-boundary-asan-instrumentation-with-call-threshold-2147483647.c: New test.
	* gcc.dg/params/param-boundary-asan-memintrin-0.c: New test.
	* gcc.dg/params/param-boundary-asan-memintrin-1.c: New test.
	* gcc.dg/params/param-boundary-asan-stack-0.c: New test.
	* gcc.dg/params/param-boundary-asan-stack-1.c: New test.
	* gcc.dg/params/param-boundary-asan-use-after-return-0.c: New test.
	* gcc.dg/params/param-boundary-asan-use-after-return-1.c: New test.
	* gcc.dg/params/param-boundary-builtin-expect-probability-0.c: New test.
	* gcc.dg/params/param-boundary-builtin-expect-probability-100.c: New test.
	* gcc.dg/params/param-boundary-case-values-threshold-0.c: New test.
	* gcc.dg/params/param-boundary-chkp-max-ctor-size-100.c: New test.
	* gcc.dg/params/param-boundary-comdat-sharing-probability-0.c: New test.
	* gcc.dg/params/param-boundary-cxx-max-namespaces-for-diagnostic-help-0.c: New test.
	* gcc.dg/params/param-boundary-early-inlining-insns-0.c: New test.
	* gcc.dg/params/param-boundary-fsm-maximum-phi-arguments-1.c: New test.
	* gcc.dg/params/param-boundary-fsm-maximum-phi-arguments-999999.c: New test.
	* gcc.dg/params/param-boundary-fsm-scale-path-blocks-1.c: New test.
	* gcc.dg/params/param-boundary-fsm-scale-path-blocks-10.c: New test.
	* gcc.dg/params/param-boundary-fsm-scale-path-stmts-1.c: New test.
	* gcc.dg/params/param-boundary-fsm-scale-path-stmts-10.c: New test.
	* gcc.dg/params/param-boundary-gcse-after-reload-critical-fraction-0.c: New test.
	* gcc.dg/params/param-boundary-gcse-after-reload-partial-fraction-0.c: New test.
	* gcc.dg/params/param-boundary-gcse-cost-distance-ratio-0.c: New test.
	* gcc.dg/params/param-boundary-gcse-unrestricted-cost-0.c: New test.
	* gcc.dg/params/param-boundary-ggc-min-expand-0.c: New test.
	* gcc.dg/params/param-boundary-ggc-min-heapsize-0.c: New test.
	* gcc.dg/params/param-boundary-graphite-max-arrays-per-scop-0.c: New test.
	* gcc.dg/params/param-boundary-graphite-max-bbs-per-function-0.c: New test.
	* gcc.dg/params/param-boundary-graphite-max-nb-scop-params-0.c: New test.
	* gcc.dg/params/param-boundary-graphite-min-loops-per-function-0.c: New test.
	* gcc.dg/params/param-boundary-hot-bb-count-ws-permille-0.c: New test.
	* gcc.dg/params/param-boundary-hot-bb-count-ws-permille-1000.c: New test.
	* gcc.dg/params/param-boundary-hot-bb-frequency-fraction-0.c: New test.
	* gcc.dg/params/param-boundary-hsa-gen-debug-stores-0.c: New test.
	* gcc.dg/params/param-boundary-hsa-gen-debug-stores-1.c: New test.
	* gcc.dg/params/param-boundary-indir-call-topn-profile-0.c: New test.
	* gcc.dg/params/param-boundary-indir-call-topn-profile-1.c: New test.
	* gcc.dg/params/param-boundary-inline-min-speedup-0.c: New test.
	* gcc.dg/params/param-boundary-inline-unit-growth-0.c: New test.
	* gcc.dg/params/param-boundary-integer-share-limit-2.c: New test.
	* gcc.dg/params/param-boundary-ipa-cp-array-index-hint-bonus-0.c: New test.
	* gcc.dg/params/param-boundary-ipa-cp-eval-threshold-0.c: New test.
	* gcc.dg/params/param-boundary-ipa-cp-loop-hint-bonus-0.c: New test.
	* gcc.dg/params/param-boundary-ipa-cp-recursion-penalty-0.c: New test.
	* gcc.dg/params/param-boundary-ipa-cp-recursion-penalty-100.c: New test.
	* gcc.dg/params/param-boundary-ipa-cp-single-call-penalty-0.c: New test.
	* gcc.dg/params/param-boundary-ipa-cp-single-call-penalty-100.c: New test.
	* gcc.dg/params/param-boundary-ipa-cp-value-list-size-0.c: New test.
	* gcc.dg/params/param-boundary-ipa-max-aa-steps-0.c: New test.
	* gcc.dg/params/param-boundary-ipa-max-agg-items-0.c: New test.
	* gcc.dg/params/param-boundary-ipa-sra-ptr-growth-factor-0.c: New test.
	* gcc.dg/params/param-boundary-ipcp-unit-growth-0.c: New test.
	* gcc.dg/params/param-boundary-ira-loop-reserved-regs-0.c: New test.
	* gcc.dg/params/param-boundary-ira-max-conflict-table-size-0.c: New test.
	* gcc.dg/params/param-boundary-ira-max-loops-num-0.c: New test.
	* gcc.dg/params/param-boundary-iv-always-prune-cand-set-bound-0.c: New test.
	* gcc.dg/params/param-boundary-iv-consider-all-candidates-bound-0.c: New test.
	* gcc.dg/params/param-boundary-iv-max-considered-uses-0.c: New test.
	* gcc.dg/params/param-boundary-l1-cache-line-size-0.c: New test.
	* gcc.dg/params/param-boundary-l1-cache-size-0.c: New test.
	* gcc.dg/params/param-boundary-l2-cache-size-0.c: New test.
	* gcc.dg/params/param-boundary-large-function-growth-0.c: New test.
	* gcc.dg/params/param-boundary-large-function-insns-0.c: New test.
	* gcc.dg/params/param-boundary-large-stack-frame-0.c: New test.
	* gcc.dg/params/param-boundary-large-stack-frame-growth-0.c: New test.
	* gcc.dg/params/param-boundary-large-unit-insns-0.c: New test.
	* gcc.dg/params/param-boundary-lim-expensive-0.c: New test.
	* gcc.dg/params/param-boundary-loop-block-tile-size-0.c: New test.
	* gcc.dg/params/param-boundary-loop-invariant-max-bbs-in-loop-0.c: New test.
	* gcc.dg/params/param-boundary-loop-max-datarefs-for-datadeps-0.c: New test.
	* gcc.dg/params/param-boundary-lra-inheritance-ebb-probability-cutoff-0.c: New test.
	* gcc.dg/params/param-boundary-lra-inheritance-ebb-probability-cutoff-100.c: New test.
	* gcc.dg/params/param-boundary-lra-max-considered-reload-pseudos-0.c: New test.
	* gcc.dg/params/param-boundary-lto-max-partition-0.c: New test.
	* gcc.dg/params/param-boundary-lto-max-partition-2147483647.c: New test.
	* gcc.dg/params/param-boundary-lto-min-partition-0.c: New test.
	* gcc.dg/params/param-boundary-lto-partitions-1.c: New test.
	* gcc.dg/params/param-boundary-max-average-unrolled-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-combine-insns-2.c: New test.
	* gcc.dg/params/param-boundary-max-combine-insns-4.c: New test.
	* gcc.dg/params/param-boundary-max-completely-peel-loop-nest-depth-0.c: New test.
	* gcc.dg/params/param-boundary-max-completely-peel-times-0.c: New test.
	* gcc.dg/params/param-boundary-max-completely-peeled-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-crossjump-edges-0.c: New test.
	* gcc.dg/params/param-boundary-max-cse-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-cse-path-length-1.c: New test.
	* gcc.dg/params/param-boundary-max-cselib-memory-locations-0.c: New test.
	* gcc.dg/params/param-boundary-max-delay-slot-insn-search-0.c: New test.
	* gcc.dg/params/param-boundary-max-delay-slot-live-search-0.c: New test.
	* gcc.dg/params/param-boundary-max-dse-active-local-stores-0.c: New test.
	* gcc.dg/params/param-boundary-max-early-inliner-iterations-0.c: New test.
	* gcc.dg/params/param-boundary-max-fields-for-field-sensitive-0.c: New test.
	* gcc.dg/params/param-boundary-max-fsm-thread-length-1.c: New test.
	* gcc.dg/params/param-boundary-max-fsm-thread-length-999999.c: New test.
	* gcc.dg/params/param-boundary-max-fsm-thread-path-insns-1.c: New test.
	* gcc.dg/params/param-boundary-max-fsm-thread-path-insns-999999.c: New test.
	* gcc.dg/params/param-boundary-max-fsm-thread-paths-1.c: New test.
	* gcc.dg/params/param-boundary-max-fsm-thread-paths-999999.c: New test.
	* gcc.dg/params/param-boundary-max-gcse-insertion-ratio-0.c: New test.
	* gcc.dg/params/param-boundary-max-gcse-memory-0.c: New test.
	* gcc.dg/params/param-boundary-max-goto-duplication-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-grow-copy-bb-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-hoist-depth-0.c: New test.
	* gcc.dg/params/param-boundary-max-inline-insns-auto-0.c: New test.
	* gcc.dg/params/param-boundary-max-inline-insns-recursive-0.c: New test.
	* gcc.dg/params/param-boundary-max-inline-insns-recursive-auto-0.c: New test.
	* gcc.dg/params/param-boundary-max-inline-insns-single-0.c: New test.
	* gcc.dg/params/param-boundary-max-inline-recursive-depth-0.c: New test.
	* gcc.dg/params/param-boundary-max-inline-recursive-depth-auto-0.c: New test.
	* gcc.dg/params/param-boundary-max-isl-operations-0.c: New test.
	* gcc.dg/params/param-boundary-max-iterations-computation-cost-0.c: New test.
	* gcc.dg/params/param-boundary-max-iterations-to-track-0.c: New test.
	* gcc.dg/params/param-boundary-max-jump-thread-duplication-stmts-0.c: New test.
	* gcc.dg/params/param-boundary-max-last-value-rtl-0.c: New test.
	* gcc.dg/params/param-boundary-max-loop-header-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-modulo-backtrack-attempts-0.c: New test.
	* gcc.dg/params/param-boundary-max-once-peeled-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-partial-antic-length-0.c: New test.
	* gcc.dg/params/param-boundary-max-peel-branches-0.c: New test.
	* gcc.dg/params/param-boundary-max-peel-times-0.c: New test.
	* gcc.dg/params/param-boundary-max-peeled-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-pending-list-length-0.c: New test.
	* gcc.dg/params/param-boundary-max-pipeline-region-blocks-0.c: New test.
	* gcc.dg/params/param-boundary-max-pipeline-region-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-pow-sqrt-depth-1.c: New test.
	* gcc.dg/params/param-boundary-max-pow-sqrt-depth-32.c: New test.
	* gcc.dg/params/param-boundary-max-predicted-iterations-0.c: New test.
	* gcc.dg/params/param-boundary-max-reload-search-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-rtl-if-conversion-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-rtl-if-conversion-insns-99.c: New test.
	* gcc.dg/params/param-boundary-max-sched-extend-regions-iters-0.c: New test.
	* gcc.dg/params/param-boundary-max-sched-insn-conflict-delay-1.c: New test.
	* gcc.dg/params/param-boundary-max-sched-insn-conflict-delay-10.c: New test.
	* gcc.dg/params/param-boundary-max-sched-ready-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-sched-region-blocks-0.c: New test.
	* gcc.dg/params/param-boundary-max-sched-region-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-slsr-cand-scan-1.c: New test.
	* gcc.dg/params/param-boundary-max-slsr-cand-scan-999999.c: New test.
	* gcc.dg/params/param-boundary-max-speculative-devirt-maydefs-0.c: New test.
	* gcc.dg/params/param-boundary-max-ssa-name-query-depth-1.c: New test.
	* gcc.dg/params/param-boundary-max-stores-to-sink-0.c: New test.
	* gcc.dg/params/param-boundary-max-tail-merge-comparisons-0.c: New test.
	* gcc.dg/params/param-boundary-max-tail-merge-iterations-0.c: New test.
	* gcc.dg/params/param-boundary-max-tracked-strlens-0.c: New test.
	* gcc.dg/params/param-boundary-max-tree-if-conversion-phi-args-2.c: New test.
	* gcc.dg/params/param-boundary-max-unroll-times-0.c: New test.
	* gcc.dg/params/param-boundary-max-unrolled-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-unswitch-insns-0.c: New test.
	* gcc.dg/params/param-boundary-max-unswitch-level-0.c: New test.
	* gcc.dg/params/param-boundary-max-variable-expansions-in-unroller-0.c: New test.
	* gcc.dg/params/param-boundary-max-vartrack-expr-depth-0.c: New test.
	* gcc.dg/params/param-boundary-max-vartrack-reverse-op-size-0.c: New test.
	* gcc.dg/params/param-boundary-max-vartrack-size-0.c: New test.
	* gcc.dg/params/param-boundary-min-crossjump-insns-1.c: New test.
	* gcc.dg/params/param-boundary-min-inline-recursive-probability-0.c: New test.
	* gcc.dg/params/param-boundary-min-insn-to-prefetch-ratio-0.c: New test.
	* gcc.dg/params/param-boundary-min-nondebug-insn-uid-1.c: New test.
	* gcc.dg/params/param-boundary-min-size-for-stack-sharing-0.c: New test.
	* gcc.dg/params/param-boundary-min-spec-prob-0.c: New test.
	* gcc.dg/params/param-boundary-min-vect-loop-bound-1.c: New test.
	* gcc.dg/params/param-boundary-parloops-chunk-size-0.c: New test.
	* gcc.dg/params/param-boundary-parloops-schedule-auto.c: New test.
	* gcc.dg/params/param-boundary-parloops-schedule-dynamic.c: New test.
	* gcc.dg/params/param-boundary-parloops-schedule-guided.c: New test.
	* gcc.dg/params/param-boundary-parloops-schedule-runtime.c: New test.
	* gcc.dg/params/param-boundary-parloops-schedule-static.c: New test.
	* gcc.dg/params/param-boundary-partial-inlining-entry-probability-0.c: New test.
	* gcc.dg/params/param-boundary-predictable-branch-outcome-0.c: New test.
	* gcc.dg/params/param-boundary-predictable-branch-outcome-50.c: New test.
	* gcc.dg/params/param-boundary-prefetch-latency-0.c: New test.
	* gcc.dg/params/param-boundary-prefetch-min-insn-to-mem-ratio-0.c: New test.
	* gcc.dg/params/param-boundary-profile-func-internal-id-0.c: New test.
	* gcc.dg/params/param-boundary-profile-func-internal-id-1.c: New test.
	* gcc.dg/params/param-boundary-sccvn-max-alias-queries-per-access-0.c: New test.
	* gcc.dg/params/param-boundary-sccvn-max-scc-size-10.c: New test.
	* gcc.dg/params/param-boundary-scev-max-expr-complexity-0.c: New test.
	* gcc.dg/params/param-boundary-scev-max-expr-size-0.c: New test.
	* gcc.dg/params/param-boundary-sched-autopref-queue-depth-0.c: New test.
	* gcc.dg/params/param-boundary-sched-mem-true-dep-cost-0.c: New test.
	* gcc.dg/params/param-boundary-sched-pressure-algorithm-1.c: New test.
	* gcc.dg/params/param-boundary-sched-pressure-algorithm-2.c: New test.
	* gcc.dg/params/param-boundary-sched-spec-prob-cutoff-0.c: New test.
	* gcc.dg/params/param-boundary-sched-spec-prob-cutoff-100.c: New test.
	* gcc.dg/params/param-boundary-sched-state-edge-prob-cutoff-0.c: New test.
	* gcc.dg/params/param-boundary-sched-state-edge-prob-cutoff-100.c: New test.
	* gcc.dg/params/param-boundary-selsched-insns-to-rename-0.c: New test.
	* gcc.dg/params/param-boundary-selsched-max-lookahead-0.c: New test.
	* gcc.dg/params/param-boundary-selsched-max-sched-times-0.c: New test.
	* gcc.dg/params/param-boundary-simultaneous-prefetches-0.c: New test.
	* gcc.dg/params/param-boundary-sink-frequency-threshold-0.c: New test.
	* gcc.dg/params/param-boundary-sink-frequency-threshold-100.c: New test.
	* gcc.dg/params/param-boundary-slp-max-insns-in-bb-0.c: New test.
	* gcc.dg/params/param-boundary-sms-dfa-history-0.c: New test.
	* gcc.dg/params/param-boundary-sms-loop-average-count-threshold-0.c: New test.
	* gcc.dg/params/param-boundary-sms-max-ii-factor-0.c: New test.
	* gcc.dg/params/param-boundary-sms-min-sc-1.c: New test.
	* gcc.dg/params/param-boundary-sra-max-scalarization-size-Osize-0.c: New test.
	* gcc.dg/params/param-boundary-sra-max-scalarization-size-Ospeed-0.c: New test.
	* gcc.dg/params/param-boundary-ssp-buffer-size-1.c: New test.
	* gcc.dg/params/param-boundary-switch-conversion-max-branch-ratio-1.c: New test.
	* gcc.dg/params/param-boundary-tm-max-aggregate-size-0.c: New test.
	* gcc.dg/params/param-boundary-tracer-dynamic-coverage-0.c: New test.
	* gcc.dg/params/param-boundary-tracer-dynamic-coverage-100.c: New test.
	* gcc.dg/params/param-boundary-tracer-dynamic-coverage-feedback-0.c: New test.
	* gcc.dg/params/param-boundary-tracer-dynamic-coverage-feedback-100.c: New test.
	* gcc.dg/params/param-boundary-tracer-max-code-growth-0.c: New test.
	* gcc.dg/params/param-boundary-tracer-min-branch-probability-0.c: New test.
	* gcc.dg/params/param-boundary-tracer-min-branch-probability-100.c: New test.
	* gcc.dg/params/param-boundary-tracer-min-branch-probability-feedback-0.c: New test.
	* gcc.dg/params/param-boundary-tracer-min-branch-probability-feedback-100.c: New test.
	* gcc.dg/params/param-boundary-tracer-min-branch-ratio-0.c: New test.
	* gcc.dg/params/param-boundary-tracer-min-branch-ratio-100.c: New test.
	* gcc.dg/params/param-boundary-tree-reassoc-width-0.c: New test.
	* gcc.dg/params/param-boundary-uninit-control-dep-attempts-1.c: New test.
	* gcc.dg/params/param-boundary-unlikely-bb-count-fraction-1.c: New test.
	* gcc.dg/params/param-boundary-unlikely-bb-count-fraction-10000.c: New test.
	* gcc.dg/params/param-boundary-use-canonical-types-0.c: New test.
	* gcc.dg/params/param-boundary-use-canonical-types-1.c: New test.
	* gcc.dg/params/param-boundary-vect-max-peeling-for-alignment-64.c: New test.
	* gcc.dg/params/param-boundary-vect-max-version-for-alias-checks-0.c: New test.
	* gcc.dg/params/param-boundary-vect-max-version-for-alignment-checks-0.c: New test.
	* gcc.dg/params/params.exp: New file.
---
 gcc/testsuite/gcc.dg/params/nanojpeg.h             | 899 +++++++++++++++++++++
 .../param-boundary-align-loop-iterations-0.c       |   4 +
 .../params/param-boundary-align-threshold-1.c      |   4 +
 .../param-boundary-allow-store-data-races-0.c      |   4 +
 .../param-boundary-allow-store-data-races-1.c      |   4 +
 .../gcc.dg/params/param-boundary-asan-globals-0.c  |   4 +
 .../gcc.dg/params/param-boundary-asan-globals-1.c  |   4 +
 .../param-boundary-asan-instrument-reads-0.c       |   4 +
 .../param-boundary-asan-instrument-reads-1.c       |   4 +
 .../param-boundary-asan-instrument-writes-0.c      |   4 +
 .../param-boundary-asan-instrument-writes-1.c      |   4 +
 ...ry-asan-instrumentation-with-call-threshold-0.c |   4 +
 ...nstrumentation-with-call-threshold-2147483647.c |   4 +
 .../params/param-boundary-asan-memintrin-0.c       |   4 +
 .../params/param-boundary-asan-memintrin-1.c       |   4 +
 .../gcc.dg/params/param-boundary-asan-stack-0.c    |   4 +
 .../gcc.dg/params/param-boundary-asan-stack-1.c    |   4 +
 .../param-boundary-asan-use-after-return-0.c       |   4 +
 .../param-boundary-asan-use-after-return-1.c       |   4 +
 .../param-boundary-builtin-expect-probability-0.c  |   4 +
 ...param-boundary-builtin-expect-probability-100.c |   4 +
 .../param-boundary-case-values-threshold-0.c       |   4 +
 .../params/param-boundary-chkp-max-ctor-size-100.c |   4 +
 .../param-boundary-comdat-sharing-probability-0.c  |   4 +
 ...dary-cxx-max-namespaces-for-diagnostic-help-0.c |   4 +
 .../params/param-boundary-early-inlining-insns-0.c |   4 +
 .../param-boundary-fsm-maximum-phi-arguments-1.c   |   4 +
 ...ram-boundary-fsm-maximum-phi-arguments-999999.c |   4 +
 .../param-boundary-fsm-scale-path-blocks-1.c       |   4 +
 .../param-boundary-fsm-scale-path-blocks-10.c      |   4 +
 .../params/param-boundary-fsm-scale-path-stmts-1.c |   4 +
 .../param-boundary-fsm-scale-path-stmts-10.c       |   4 +
 ...oundary-gcse-after-reload-critical-fraction-0.c |   4 +
 ...boundary-gcse-after-reload-partial-fraction-0.c |   4 +
 .../param-boundary-gcse-cost-distance-ratio-0.c    |   4 +
 .../param-boundary-gcse-unrestricted-cost-0.c      |   4 +
 .../params/param-boundary-ggc-min-expand-0.c       |   4 +
 .../params/param-boundary-ggc-min-heapsize-0.c     |   4 +
 ...param-boundary-graphite-max-arrays-per-scop-0.c |   4 +
 ...aram-boundary-graphite-max-bbs-per-function-0.c |   4 +
 .../param-boundary-graphite-max-nb-scop-params-0.c |   4 +
 ...am-boundary-graphite-min-loops-per-function-0.c |   4 +
 .../param-boundary-hot-bb-count-ws-permille-0.c    |   4 +
 .../param-boundary-hot-bb-count-ws-permille-1000.c |   4 +
 .../param-boundary-hot-bb-frequency-fraction-0.c   |   4 +
 .../params/param-boundary-hsa-gen-debug-stores-0.c |   4 +
 .../params/param-boundary-hsa-gen-debug-stores-1.c |   4 +
 .../param-boundary-indir-call-topn-profile-0.c     |   4 +
 .../param-boundary-indir-call-topn-profile-1.c     |   4 +
 .../params/param-boundary-inline-min-speedup-0.c   |   4 +
 .../params/param-boundary-inline-unit-growth-0.c   |   4 +
 .../params/param-boundary-integer-share-limit-2.c  |   4 +
 ...aram-boundary-ipa-cp-array-index-hint-bonus-0.c |   4 +
 .../param-boundary-ipa-cp-eval-threshold-0.c       |   4 +
 .../param-boundary-ipa-cp-loop-hint-bonus-0.c      |   4 +
 .../param-boundary-ipa-cp-recursion-penalty-0.c    |   4 +
 .../param-boundary-ipa-cp-recursion-penalty-100.c  |   4 +
 .../param-boundary-ipa-cp-single-call-penalty-0.c  |   4 +
 ...param-boundary-ipa-cp-single-call-penalty-100.c |   4 +
 .../param-boundary-ipa-cp-value-list-size-0.c      |   4 +
 .../params/param-boundary-ipa-max-aa-steps-0.c     |   4 +
 .../params/param-boundary-ipa-max-agg-items-0.c    |   4 +
 .../param-boundary-ipa-sra-ptr-growth-factor-0.c   |   4 +
 .../params/param-boundary-ipcp-unit-growth-0.c     |   4 +
 .../param-boundary-ira-loop-reserved-regs-0.c      |   4 +
 .../param-boundary-ira-max-conflict-table-size-0.c |   4 +
 .../params/param-boundary-ira-max-loops-num-0.c    |   4 +
 ...ram-boundary-iv-always-prune-cand-set-bound-0.c |   4 +
 ...m-boundary-iv-consider-all-candidates-bound-0.c |   4 +
 .../param-boundary-iv-max-considered-uses-0.c      |   4 +
 .../params/param-boundary-l1-cache-line-size-0.c   |   4 +
 .../gcc.dg/params/param-boundary-l1-cache-size-0.c |   4 +
 .../gcc.dg/params/param-boundary-l2-cache-size-0.c |   4 +
 .../param-boundary-large-function-growth-0.c       |   4 +
 .../params/param-boundary-large-function-insns-0.c |   4 +
 .../params/param-boundary-large-stack-frame-0.c    |   4 +
 .../param-boundary-large-stack-frame-growth-0.c    |   4 +
 .../params/param-boundary-large-unit-insns-0.c     |   4 +
 .../gcc.dg/params/param-boundary-lim-expensive-0.c |   4 +
 .../params/param-boundary-loop-block-tile-size-0.c |   4 +
 ...ram-boundary-loop-invariant-max-bbs-in-loop-0.c |   4 +
 ...ram-boundary-loop-max-datarefs-for-datadeps-0.c |   4 +
 ...dary-lra-inheritance-ebb-probability-cutoff-0.c |   4 +
 ...ry-lra-inheritance-ebb-probability-cutoff-100.c |   4 +
 ...-boundary-lra-max-considered-reload-pseudos-0.c |   4 +
 .../params/param-boundary-lto-max-partition-0.c    |   4 +
 .../param-boundary-lto-max-partition-2147483647.c  |   4 +
 .../params/param-boundary-lto-min-partition-0.c    |   4 +
 .../params/param-boundary-lto-partitions-1.c       |   4 +
 .../param-boundary-max-average-unrolled-insns-0.c  |   4 +
 .../params/param-boundary-max-combine-insns-2.c    |   4 +
 .../params/param-boundary-max-combine-insns-4.c    |   4 +
 ...oundary-max-completely-peel-loop-nest-depth-0.c |   4 +
 .../param-boundary-max-completely-peel-times-0.c   |   4 +
 .../param-boundary-max-completely-peeled-insns-0.c |   4 +
 .../params/param-boundary-max-crossjump-edges-0.c  |   4 +
 .../gcc.dg/params/param-boundary-max-cse-insns-0.c |   4 +
 .../params/param-boundary-max-cse-path-length-1.c  |   4 +
 .../param-boundary-max-cselib-memory-locations-0.c |   4 +
 .../param-boundary-max-delay-slot-insn-search-0.c  |   4 +
 .../param-boundary-max-delay-slot-live-search-0.c  |   4 +
 .../param-boundary-max-dse-active-local-stores-0.c |   4 +
 ...param-boundary-max-early-inliner-iterations-0.c |   4 +
 ...ram-boundary-max-fields-for-field-sensitive-0.c |   4 +
 .../param-boundary-max-fsm-thread-length-1.c       |   4 +
 .../param-boundary-max-fsm-thread-length-999999.c  |   4 +
 .../param-boundary-max-fsm-thread-path-insns-1.c   |   4 +
 ...ram-boundary-max-fsm-thread-path-insns-999999.c |   4 +
 .../params/param-boundary-max-fsm-thread-paths-1.c |   4 +
 .../param-boundary-max-fsm-thread-paths-999999.c   |   4 +
 .../param-boundary-max-gcse-insertion-ratio-0.c    |   4 +
 .../params/param-boundary-max-gcse-memory-0.c      |   4 +
 .../param-boundary-max-goto-duplication-insns-0.c  |   4 +
 .../param-boundary-max-grow-copy-bb-insns-0.c      |   4 +
 .../params/param-boundary-max-hoist-depth-0.c      |   4 +
 .../param-boundary-max-inline-insns-auto-0.c       |   4 +
 .../param-boundary-max-inline-insns-recursive-0.c  |   4 +
 ...am-boundary-max-inline-insns-recursive-auto-0.c |   4 +
 .../param-boundary-max-inline-insns-single-0.c     |   4 +
 .../param-boundary-max-inline-recursive-depth-0.c  |   4 +
 ...am-boundary-max-inline-recursive-depth-auto-0.c |   4 +
 .../params/param-boundary-max-isl-operations-0.c   |   4 +
 ...am-boundary-max-iterations-computation-cost-0.c |   4 +
 .../param-boundary-max-iterations-to-track-0.c     |   4 +
 ...-boundary-max-jump-thread-duplication-stmts-0.c |   4 +
 .../params/param-boundary-max-last-value-rtl-0.c   |   4 +
 .../param-boundary-max-loop-header-insns-0.c       |   4 +
 ...aram-boundary-max-modulo-backtrack-attempts-0.c |   4 +
 .../param-boundary-max-once-peeled-insns-0.c       |   4 +
 .../param-boundary-max-partial-antic-length-0.c    |   4 +
 .../params/param-boundary-max-peel-branches-0.c    |   4 +
 .../params/param-boundary-max-peel-times-0.c       |   4 +
 .../params/param-boundary-max-peeled-insns-0.c     |   4 +
 .../param-boundary-max-pending-list-length-0.c     |   4 +
 .../param-boundary-max-pipeline-region-blocks-0.c  |   4 +
 .../param-boundary-max-pipeline-region-insns-0.c   |   4 +
 .../params/param-boundary-max-pow-sqrt-depth-1.c   |   4 +
 .../params/param-boundary-max-pow-sqrt-depth-32.c  |   4 +
 .../param-boundary-max-predicted-iterations-0.c    |   4 +
 .../param-boundary-max-reload-search-insns-0.c     |   4 +
 .../param-boundary-max-rtl-if-conversion-insns-0.c |   4 +
 ...param-boundary-max-rtl-if-conversion-insns-99.c |   4 +
 ...ram-boundary-max-sched-extend-regions-iters-0.c |   4 +
 ...aram-boundary-max-sched-insn-conflict-delay-1.c |   4 +
 ...ram-boundary-max-sched-insn-conflict-delay-10.c |   4 +
 .../param-boundary-max-sched-ready-insns-0.c       |   4 +
 .../param-boundary-max-sched-region-blocks-0.c     |   4 +
 .../param-boundary-max-sched-region-insns-0.c      |   4 +
 .../params/param-boundary-max-slsr-cand-scan-1.c   |   4 +
 .../param-boundary-max-slsr-cand-scan-999999.c     |   4 +
 ...ram-boundary-max-speculative-devirt-maydefs-0.c |   4 +
 .../param-boundary-max-ssa-name-query-depth-1.c    |   4 +
 .../params/param-boundary-max-stores-to-sink-0.c   |   4 +
 .../param-boundary-max-tail-merge-comparisons-0.c  |   4 +
 .../param-boundary-max-tail-merge-iterations-0.c   |   4 +
 .../params/param-boundary-max-tracked-strlens-0.c  |   4 +
 ...am-boundary-max-tree-if-conversion-phi-args-2.c |   4 +
 .../params/param-boundary-max-unroll-times-0.c     |   4 +
 .../params/param-boundary-max-unrolled-insns-0.c   |   4 +
 .../params/param-boundary-max-unswitch-insns-0.c   |   4 +
 .../params/param-boundary-max-unswitch-level-0.c   |   4 +
 ...oundary-max-variable-expansions-in-unroller-0.c |   4 +
 .../param-boundary-max-vartrack-expr-depth-0.c     |   4 +
 ...param-boundary-max-vartrack-reverse-op-size-0.c |   4 +
 .../params/param-boundary-max-vartrack-size-0.c    |   4 +
 .../params/param-boundary-min-crossjump-insns-1.c  |   4 +
 ...m-boundary-min-inline-recursive-probability-0.c |   4 +
 .../param-boundary-min-insn-to-prefetch-ratio-0.c  |   4 +
 .../param-boundary-min-nondebug-insn-uid-1.c       |   4 +
 .../param-boundary-min-size-for-stack-sharing-0.c  |   4 +
 .../gcc.dg/params/param-boundary-min-spec-prob-0.c |   4 +
 .../params/param-boundary-min-vect-loop-bound-1.c  |   4 +
 .../params/param-boundary-parloops-chunk-size-0.c  |   4 +
 .../params/param-boundary-parloops-schedule-auto.c |   4 +
 .../param-boundary-parloops-schedule-dynamic.c     |   4 +
 .../param-boundary-parloops-schedule-guided.c      |   4 +
 .../param-boundary-parloops-schedule-runtime.c     |   4 +
 .../param-boundary-parloops-schedule-static.c      |   4 +
 ...boundary-partial-inlining-entry-probability-0.c |   4 +
 .../param-boundary-predictable-branch-outcome-0.c  |   4 +
 .../param-boundary-predictable-branch-outcome-50.c |   4 +
 .../params/param-boundary-prefetch-latency-0.c     |   4 +
 ...ram-boundary-prefetch-min-insn-to-mem-ratio-0.c |   4 +
 .../param-boundary-profile-func-internal-id-0.c    |   4 +
 .../param-boundary-profile-func-internal-id-1.c    |   4 +
 ...boundary-sccvn-max-alias-queries-per-access-0.c |   4 +
 .../params/param-boundary-sccvn-max-scc-size-10.c  |   4 +
 .../param-boundary-scev-max-expr-complexity-0.c    |   4 +
 .../params/param-boundary-scev-max-expr-size-0.c   |   4 +
 .../param-boundary-sched-autopref-queue-depth-0.c  |   4 +
 .../param-boundary-sched-mem-true-dep-cost-0.c     |   4 +
 .../param-boundary-sched-pressure-algorithm-1.c    |   4 +
 .../param-boundary-sched-pressure-algorithm-2.c    |   4 +
 .../param-boundary-sched-spec-prob-cutoff-0.c      |   4 +
 .../param-boundary-sched-spec-prob-cutoff-100.c    |   4 +
 ...param-boundary-sched-state-edge-prob-cutoff-0.c |   4 +
 ...ram-boundary-sched-state-edge-prob-cutoff-100.c |   4 +
 .../param-boundary-selsched-insns-to-rename-0.c    |   4 +
 .../param-boundary-selsched-max-lookahead-0.c      |   4 +
 .../param-boundary-selsched-max-sched-times-0.c    |   4 +
 .../param-boundary-simultaneous-prefetches-0.c     |   4 +
 .../param-boundary-sink-frequency-threshold-0.c    |   4 +
 .../param-boundary-sink-frequency-threshold-100.c  |   4 +
 .../params/param-boundary-slp-max-insns-in-bb-0.c  |   4 +
 .../params/param-boundary-sms-dfa-history-0.c      |   4 +
 ...m-boundary-sms-loop-average-count-threshold-0.c |   4 +
 .../params/param-boundary-sms-max-ii-factor-0.c    |   4 +
 .../gcc.dg/params/param-boundary-sms-min-sc-1.c    |   4 +
 ...m-boundary-sra-max-scalarization-size-Osize-0.c |   4 +
 ...-boundary-sra-max-scalarization-size-Ospeed-0.c |   4 +
 .../params/param-boundary-ssp-buffer-size-1.c      |   4 +
 ...boundary-switch-conversion-max-branch-ratio-1.c |   4 +
 .../param-boundary-tm-max-aggregate-size-0.c       |   4 +
 .../param-boundary-tracer-dynamic-coverage-0.c     |   4 +
 .../param-boundary-tracer-dynamic-coverage-100.c   |   4 +
 ...m-boundary-tracer-dynamic-coverage-feedback-0.c |   4 +
 ...boundary-tracer-dynamic-coverage-feedback-100.c |   4 +
 .../param-boundary-tracer-max-code-growth-0.c      |   4 +
 ...aram-boundary-tracer-min-branch-probability-0.c |   4 +
 ...am-boundary-tracer-min-branch-probability-100.c |   4 +
 ...dary-tracer-min-branch-probability-feedback-0.c |   4 +
 ...ry-tracer-min-branch-probability-feedback-100.c |   4 +
 .../param-boundary-tracer-min-branch-ratio-0.c     |   4 +
 .../param-boundary-tracer-min-branch-ratio-100.c   |   4 +
 .../params/param-boundary-tree-reassoc-width-0.c   |   4 +
 .../param-boundary-uninit-control-dep-attempts-1.c |   4 +
 .../param-boundary-unlikely-bb-count-fraction-1.c  |   4 +
 ...ram-boundary-unlikely-bb-count-fraction-10000.c |   4 +
 .../params/param-boundary-use-canonical-types-0.c  |   4 +
 .../params/param-boundary-use-canonical-types-1.c  |   4 +
 ...am-boundary-vect-max-peeling-for-alignment-64.c |   4 +
 ...-boundary-vect-max-version-for-alias-checks-0.c |   4 +
 ...ndary-vect-max-version-for-alignment-checks-0.c |   4 +
 gcc/testsuite/gcc.dg/params/params.exp             |  31 +
 234 files changed, 1858 insertions(+)
 create mode 100644 gcc/testsuite/gcc.dg/params/nanojpeg.h
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-align-loop-iterations-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-align-threshold-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-allow-store-data-races-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-allow-store-data-races-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-globals-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-globals-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-reads-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-reads-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-writes-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-writes-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-instrumentation-with-call-threshold-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-instrumentation-with-call-threshold-2147483647.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-memintrin-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-memintrin-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-stack-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-stack-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-use-after-return-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-asan-use-after-return-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-builtin-expect-probability-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-builtin-expect-probability-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-case-values-threshold-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-chkp-max-ctor-size-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-comdat-sharing-probability-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-cxx-max-namespaces-for-diagnostic-help-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-early-inlining-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-fsm-maximum-phi-arguments-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-fsm-maximum-phi-arguments-999999.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-blocks-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-blocks-10.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-stmts-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-stmts-10.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-gcse-after-reload-critical-fraction-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-gcse-after-reload-partial-fraction-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-gcse-cost-distance-ratio-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-gcse-unrestricted-cost-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ggc-min-expand-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ggc-min-heapsize-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-arrays-per-scop-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-bbs-per-function-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-nb-scop-params-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-graphite-min-loops-per-function-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-count-ws-permille-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-count-ws-permille-1000.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-frequency-fraction-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-hsa-gen-debug-stores-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-hsa-gen-debug-stores-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-indir-call-topn-profile-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-indir-call-topn-profile-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-inline-min-speedup-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-inline-unit-growth-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-integer-share-limit-2.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-array-index-hint-bonus-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-eval-threshold-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-loop-hint-bonus-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-recursion-penalty-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-recursion-penalty-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-single-call-penalty-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-single-call-penalty-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-value-list-size-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipa-max-aa-steps-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipa-max-agg-items-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipa-sra-ptr-growth-factor-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ipcp-unit-growth-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ira-loop-reserved-regs-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ira-max-conflict-table-size-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ira-max-loops-num-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-iv-always-prune-cand-set-bound-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-iv-consider-all-candidates-bound-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-iv-max-considered-uses-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-l1-cache-line-size-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-l1-cache-size-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-l2-cache-size-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-large-function-growth-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-large-function-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-large-stack-frame-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-large-stack-frame-growth-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-large-unit-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-lim-expensive-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-loop-block-tile-size-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-loop-invariant-max-bbs-in-loop-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-loop-max-datarefs-for-datadeps-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-lra-inheritance-ebb-probability-cutoff-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-lra-inheritance-ebb-probability-cutoff-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-lra-max-considered-reload-pseudos-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-lto-max-partition-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-lto-max-partition-2147483647.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-lto-min-partition-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-lto-partitions-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-average-unrolled-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-combine-insns-2.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-combine-insns-4.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peel-loop-nest-depth-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peel-times-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peeled-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-crossjump-edges-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-cse-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-cse-path-length-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-cselib-memory-locations-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-delay-slot-insn-search-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-delay-slot-live-search-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-dse-active-local-stores-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-early-inliner-iterations-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-fields-for-field-sensitive-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-length-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-length-999999.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-path-insns-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-path-insns-999999.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-paths-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-paths-999999.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-gcse-insertion-ratio-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-gcse-memory-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-goto-duplication-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-grow-copy-bb-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-hoist-depth-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-auto-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-recursive-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-recursive-auto-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-single-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-inline-recursive-depth-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-inline-recursive-depth-auto-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-isl-operations-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-iterations-computation-cost-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-iterations-to-track-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-jump-thread-duplication-stmts-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-last-value-rtl-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-loop-header-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-modulo-backtrack-attempts-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-once-peeled-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-partial-antic-length-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-peel-branches-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-peel-times-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-peeled-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-pending-list-length-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-pipeline-region-blocks-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-pipeline-region-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-pow-sqrt-depth-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-pow-sqrt-depth-32.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-predicted-iterations-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-reload-search-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-rtl-if-conversion-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-rtl-if-conversion-insns-99.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-sched-extend-regions-iters-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-sched-insn-conflict-delay-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-sched-insn-conflict-delay-10.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-sched-ready-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-sched-region-blocks-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-sched-region-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-slsr-cand-scan-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-slsr-cand-scan-999999.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-speculative-devirt-maydefs-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-ssa-name-query-depth-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-stores-to-sink-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-tail-merge-comparisons-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-tail-merge-iterations-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-tracked-strlens-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-tree-if-conversion-phi-args-2.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-unroll-times-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-unrolled-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-unswitch-insns-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-unswitch-level-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-variable-expansions-in-unroller-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-expr-depth-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-reverse-op-size-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-size-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-min-crossjump-insns-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-min-inline-recursive-probability-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-min-insn-to-prefetch-ratio-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-min-nondebug-insn-uid-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-min-size-for-stack-sharing-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-min-spec-prob-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-min-vect-loop-bound-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-parloops-chunk-size-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-auto.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-dynamic.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-guided.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-runtime.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-static.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-partial-inlining-entry-probability-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-predictable-branch-outcome-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-predictable-branch-outcome-50.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-prefetch-latency-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-prefetch-min-insn-to-mem-ratio-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-profile-func-internal-id-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-profile-func-internal-id-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sccvn-max-alias-queries-per-access-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sccvn-max-scc-size-10.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-scev-max-expr-complexity-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-scev-max-expr-size-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sched-autopref-queue-depth-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sched-mem-true-dep-cost-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sched-pressure-algorithm-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sched-pressure-algorithm-2.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sched-spec-prob-cutoff-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sched-spec-prob-cutoff-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sched-state-edge-prob-cutoff-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sched-state-edge-prob-cutoff-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-selsched-insns-to-rename-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-selsched-max-lookahead-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-selsched-max-sched-times-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-simultaneous-prefetches-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sink-frequency-threshold-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sink-frequency-threshold-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-slp-max-insns-in-bb-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sms-dfa-history-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sms-loop-average-count-threshold-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sms-max-ii-factor-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sms-min-sc-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sra-max-scalarization-size-Osize-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-sra-max-scalarization-size-Ospeed-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-ssp-buffer-size-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-switch-conversion-max-branch-ratio-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tm-max-aggregate-size-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-feedback-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-feedback-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tracer-max-code-growth-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-feedback-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-feedback-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-ratio-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-ratio-100.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-tree-reassoc-width-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-uninit-control-dep-attempts-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-unlikely-bb-count-fraction-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-unlikely-bb-count-fraction-10000.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-use-canonical-types-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-use-canonical-types-1.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-vect-max-peeling-for-alignment-64.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-vect-max-version-for-alias-checks-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/param-boundary-vect-max-version-for-alignment-checks-0.c
 create mode 100644 gcc/testsuite/gcc.dg/params/params.exp

diff --git a/gcc/testsuite/gcc.dg/params/nanojpeg.h b/gcc/testsuite/gcc.dg/params/nanojpeg.h
new file mode 100644
index 0000000..57aefca
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/nanojpeg.h
@@ -0,0 +1,899 @@
+// NanoJPEG -- KeyJ's Tiny Baseline JPEG Decoder
+// version 1.3.2 (2014-02-02)
+// by Martin J. Fiedler <martin.fiedler@gmx.net>
+//
+// This software is published under the terms of KeyJ's Research License,
+// version 0.2. Usage of this software is subject to the following conditions:
+// 0. There's no warranty whatsoever. The author(s) of this software can not
+//    be held liable for any damages that occur when using this software.
+// 1. This software may be used freely for both non-commercial and commercial
+//    purposes.
+// 2. This software may be redistributed freely as long as no fees are charged
+//    for the distribution and this license information is included.
+// 3. This software may be modified freely except for this license information,
+//    which must not be changed in any way.
+// 4. If anything other than configuration, indentation or comments have been
+//    altered in the code, the original author(s) must receive a copy of the
+//    modified code.
+
+
+///////////////////////////////////////////////////////////////////////////////
+// DOCUMENTATION SECTION                                                     //
+// read this if you want to know what this is all about                      //
+///////////////////////////////////////////////////////////////////////////////
+
+// INTRODUCTION
+// ============
+//
+// This is a minimal decoder for baseline JPEG images. It accepts memory dumps
+// of JPEG files as input and generates either 8-bit grayscale or packed 24-bit
+// RGB images as output. It does not parse JFIF or Exif headers; all JPEG files
+// are assumed to be either grayscale or YCbCr. CMYK or other color spaces are
+// not supported. All YCbCr subsampling schemes with power-of-two ratios are
+// supported, as are restart intervals. Progressive or lossless JPEG is not
+// supported.
+// Summed up, NanoJPEG should be able to decode all images from digital cameras
+// and most common forms of other non-progressive JPEG images.
+// The decoder is not optimized for speed, it's optimized for simplicity and
+// small code. Image quality should be at a reasonable level. A bicubic chroma
+// upsampling filter ensures that subsampled YCbCr images are rendered in
+// decent quality. The decoder is not meant to deal with broken JPEG files in
+// a graceful manner; if anything is wrong with the bitstream, decoding will
+// simply fail.
+// The code should work with every modern C compiler without problems and
+// should not emit any warnings. It uses only (at least) 32-bit integer
+// arithmetic and is supposed to be endianness independent and 64-bit clean.
+// However, it is not thread-safe.
+
+
+// COMPILE-TIME CONFIGURATION
+// ==========================
+//
+// The following aspects of NanoJPEG can be controlled with preprocessor
+// defines:
+//
+// _NJ_EXAMPLE_PROGRAM     = Compile a main() function with an example
+//                           program.
+// _NJ_INCLUDE_HEADER_ONLY = Don't compile anything, just act as a header
+//                           file for NanoJPEG. Example:
+//                               #define _NJ_INCLUDE_HEADER_ONLY
+//                               #include "nanojpeg.c"
+//                               int main(void) {
+//                                   njInit();
+//                                   // your code here
+//                                   njDone();
+//                               }
+// NJ_USE_LIBC=1           = Use the malloc(), free(), memset() and memcpy()
+//                           functions from the standard C library (default).
+// NJ_USE_LIBC=0           = Don't use the standard C library. In this mode,
+//                           external functions njAlloc(), njFreeMem(),
+//                           njFillMem() and njCopyMem() need to be defined
+//                           and implemented somewhere.
+// NJ_USE_WIN32=0          = Normal mode (default).
+// NJ_USE_WIN32=1          = If compiling with MSVC for Win32 and
+//                           NJ_USE_LIBC=0, NanoJPEG will use its own
+//                           implementations of the required C library
+//                           functions (default if compiling with MSVC and
+//                           NJ_USE_LIBC=0).
+// NJ_CHROMA_FILTER=1      = Use the bicubic chroma upsampling filter
+//                           (default).
+// NJ_CHROMA_FILTER=0      = Use simple pixel repetition for chroma upsampling
+//                           (bad quality, but faster and less code).
+
+
+// API
+// ===
+//
+// For API documentation, read the "header section" below.
+
+
+// EXAMPLE
+// =======
+//
+// A few pages below, you can find an example program that uses NanoJPEG to
+// convert JPEG files into PGM or PPM. To compile it, use something like
+//     gcc -O3 -D_NJ_EXAMPLE_PROGRAM -o nanojpeg nanojpeg.c
+// You may also add -std=c99 -Wall -Wextra -pedantic -Werror, if you want :)
+
+
+///////////////////////////////////////////////////////////////////////////////
+// HEADER SECTION                                                            //
+// copy and pase this into nanojpeg.h if you want                            //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NANOJPEG_H
+#define _NANOJPEG_H
+
+// nj_result_t: Result codes for njDecode().
+typedef enum _nj_result {
+    NJ_OK = 0,        // no error, decoding successful
+    NJ_NO_JPEG,       // not a JPEG file
+    NJ_UNSUPPORTED,   // unsupported format
+    NJ_OUT_OF_MEM,    // out of memory
+    NJ_INTERNAL_ERR,  // internal error
+    NJ_SYNTAX_ERROR,  // syntax error
+    __NJ_FINISHED,    // used internally, will never be reported
+} nj_result_t;
+
+// njInit: Initialize NanoJPEG.
+// For safety reasons, this should be called at least one time before using
+// using any of the other NanoJPEG functions.
+void njInit(void);
+
+// njDecode: Decode a JPEG image.
+// Decodes a memory dump of a JPEG file into internal buffers.
+// Parameters:
+//   jpeg = The pointer to the memory dump.
+//   size = The size of the JPEG file.
+// Return value: The error code in case of failure, or NJ_OK (zero) on success.
+nj_result_t njDecode(const void* jpeg, const int size);
+
+// njGetWidth: Return the width (in pixels) of the most recently decoded
+// image. If njDecode() failed, the result of njGetWidth() is undefined.
+int njGetWidth(void);
+
+// njGetHeight: Return the height (in pixels) of the most recently decoded
+// image. If njDecode() failed, the result of njGetHeight() is undefined.
+int njGetHeight(void);
+
+// njIsColor: Return 1 if the most recently decoded image is a color image
+// (RGB) or 0 if it is a grayscale image. If njDecode() failed, the result
+// of njGetWidth() is undefined.
+int njIsColor(void);
+
+// njGetImage: Returns the decoded image data.
+// Returns a pointer to the most recently image. The memory layout it byte-
+// oriented, top-down, without any padding between lines. Pixels of color
+// images will be stored as three consecutive bytes for the red, green and
+// blue channels. This data format is thus compatible with the PGM or PPM
+// file formats and the OpenGL texture formats GL_LUMINANCE8 or GL_RGB8.
+// If njDecode() failed, the result of njGetImage() is undefined.
+unsigned char* njGetImage(void);
+
+// njGetImageSize: Returns the size (in bytes) of the image data returned
+// by njGetImage(). If njDecode() failed, the result of njGetImageSize() is
+// undefined.
+int njGetImageSize(void);
+
+// njDone: Uninitialize NanoJPEG.
+// Resets NanoJPEG's internal state and frees all memory that has been
+// allocated at run-time by NanoJPEG. It is still possible to decode another
+// image after a njDone() call.
+void njDone(void);
+
+#endif//_NANOJPEG_H
+
+
+///////////////////////////////////////////////////////////////////////////////
+// CONFIGURATION SECTION                                                     //
+// adjust the default settings for the NJ_ defines here                      //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef NJ_USE_LIBC
+    #define NJ_USE_LIBC 1
+#endif
+
+#ifndef NJ_USE_WIN32
+  #ifdef _MSC_VER
+    #define NJ_USE_WIN32 (!NJ_USE_LIBC)
+  #else
+    #define NJ_USE_WIN32 0
+  #endif
+#endif
+
+#ifndef NJ_CHROMA_FILTER
+    #define NJ_CHROMA_FILTER 1
+#endif
+
+
+///////////////////////////////////////////////////////////////////////////////
+// EXAMPLE PROGRAM                                                           //
+// just define _NJ_EXAMPLE_PROGRAM to compile this (requires NJ_USE_LIBC)    //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifdef  _NJ_EXAMPLE_PROGRAM
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int main(int argc, char* argv[]) {
+    int size;
+    char *buf;
+    FILE *f;
+
+    if (argc < 2) {
+        printf("Usage: %s <input.jpg> [<output.ppm>]\n", argv[0]);
+        return 2;
+    }
+    f = fopen(argv[1], "rb");
+    if (!f) {
+        printf("Error opening the input file.\n");
+        return 1;
+    }
+    fseek(f, 0, SEEK_END);
+    size = (int) ftell(f);
+    buf = malloc(size);
+    fseek(f, 0, SEEK_SET);
+    size = (int) fread(buf, 1, size, f);
+    fclose(f);
+
+    njInit();
+    if (njDecode(buf, size)) {
+        printf("Error decoding the input file.\n");
+        return 1;
+    }
+
+    f = fopen((argc > 2) ? argv[2] : (njIsColor() ? "nanojpeg_out.ppm" : "nanojpeg_out.pgm"), "wb");
+    if (!f) {
+        printf("Error opening the output file.\n");
+        return 1;
+    }
+    fprintf(f, "P%d\n%d %d\n255\n", njIsColor() ? 6 : 5, njGetWidth(), njGetHeight());
+    fwrite(njGetImage(), 1, njGetImageSize(), f);
+    fclose(f);
+    njDone();
+    return 0;
+}
+
+#endif
+
+
+///////////////////////////////////////////////////////////////////////////////
+// IMPLEMENTATION SECTION                                                    //
+// you may stop reading here                                                 //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NJ_INCLUDE_HEADER_ONLY
+
+#ifdef _MSC_VER
+    #define NJ_INLINE static __inline
+    #define NJ_FORCE_INLINE static __forceinline
+#else
+    #define NJ_INLINE static inline
+    #define NJ_FORCE_INLINE static inline
+#endif
+
+#if NJ_USE_LIBC
+    #include <stdlib.h>
+    #include <string.h>
+    #define njAllocMem malloc
+    #define njFreeMem  free
+    #define njFillMem  memset
+    #define njCopyMem  memcpy
+#elif NJ_USE_WIN32
+    #include <windows.h>
+    #define njAllocMem(size) ((void*) LocalAlloc(LMEM_FIXED, (SIZE_T)(size)))
+    #define njFreeMem(block) ((void) LocalFree((HLOCAL) block))
+    NJ_INLINE void njFillMem(void* block, unsigned char value, int count) { __asm {
+        mov edi, block
+        mov al, value
+        mov ecx, count
+        rep stosb
+    } }
+    NJ_INLINE void njCopyMem(void* dest, const void* src, int count) { __asm {
+        mov edi, dest
+        mov esi, src
+        mov ecx, count
+        rep movsb
+    } }
+#else
+    extern void* njAllocMem(int size);
+    extern void njFreeMem(void* block);
+    extern void njFillMem(void* block, unsigned char byte, int size);
+    extern void njCopyMem(void* dest, const void* src, int size);
+#endif
+
+typedef struct _nj_code {
+    unsigned char bits, code;
+} nj_vlc_code_t;
+
+typedef struct _nj_cmp {
+    int cid;
+    int ssx, ssy;
+    int width, height;
+    int stride;
+    int qtsel;
+    int actabsel, dctabsel;
+    int dcpred;
+    unsigned char *pixels;
+} nj_component_t;
+
+typedef struct _nj_ctx {
+    nj_result_t error;
+    const unsigned char *pos;
+    int size;
+    int length;
+    int width, height;
+    int mbwidth, mbheight;
+    int mbsizex, mbsizey;
+    int ncomp;
+    nj_component_t comp[3];
+    int qtused, qtavail;
+    unsigned char qtab[4][64];
+    nj_vlc_code_t vlctab[4][65536];
+    int buf, bufbits;
+    int block[64];
+    int rstinterval;
+    unsigned char *rgb;
+} nj_context_t;
+
+static nj_context_t nj;
+
+static const char njZZ[64] = { 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18,
+11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35,
+42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45,
+38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63 };
+
+NJ_FORCE_INLINE unsigned char njClip(const int x) {
+    return (x < 0) ? 0 : ((x > 0xFF) ? 0xFF : (unsigned char) x);
+}
+
+#define W1 2841
+#define W2 2676
+#define W3 2408
+#define W5 1609
+#define W6 1108
+#define W7 565
+
+NJ_INLINE void njRowIDCT(int* blk) {
+    int x0, x1, x2, x3, x4, x5, x6, x7, x8;
+    if (!((x1 = blk[4] << 11)
+        | (x2 = blk[6])
+        | (x3 = blk[2])
+        | (x4 = blk[1])
+        | (x5 = blk[7])
+        | (x6 = blk[5])
+        | (x7 = blk[3])))
+    {
+        blk[0] = blk[1] = blk[2] = blk[3] = blk[4] = blk[5] = blk[6] = blk[7] = blk[0] << 3;
+        return;
+    }
+    x0 = (blk[0] << 11) + 128;
+    x8 = W7 * (x4 + x5);
+    x4 = x8 + (W1 - W7) * x4;
+    x5 = x8 - (W1 + W7) * x5;
+    x8 = W3 * (x6 + x7);
+    x6 = x8 - (W3 - W5) * x6;
+    x7 = x8 - (W3 + W5) * x7;
+    x8 = x0 + x1;
+    x0 -= x1;
+    x1 = W6 * (x3 + x2);
+    x2 = x1 - (W2 + W6) * x2;
+    x3 = x1 + (W2 - W6) * x3;
+    x1 = x4 + x6;
+    x4 -= x6;
+    x6 = x5 + x7;
+    x5 -= x7;
+    x7 = x8 + x3;
+    x8 -= x3;
+    x3 = x0 + x2;
+    x0 -= x2;
+    x2 = (181 * (x4 + x5) + 128) >> 8;
+    x4 = (181 * (x4 - x5) + 128) >> 8;
+    blk[0] = (x7 + x1) >> 8;
+    blk[1] = (x3 + x2) >> 8;
+    blk[2] = (x0 + x4) >> 8;
+    blk[3] = (x8 + x6) >> 8;
+    blk[4] = (x8 - x6) >> 8;
+    blk[5] = (x0 - x4) >> 8;
+    blk[6] = (x3 - x2) >> 8;
+    blk[7] = (x7 - x1) >> 8;
+}
+
+NJ_INLINE void njColIDCT(const int* blk, unsigned char *out, int stride) {
+    int x0, x1, x2, x3, x4, x5, x6, x7, x8;
+    if (!((x1 = blk[8*4] << 8)
+        | (x2 = blk[8*6])
+        | (x3 = blk[8*2])
+        | (x4 = blk[8*1])
+        | (x5 = blk[8*7])
+        | (x6 = blk[8*5])
+        | (x7 = blk[8*3])))
+    {
+        x1 = njClip(((blk[0] + 32) >> 6) + 128);
+        for (x0 = 8;  x0;  --x0) {
+            *out = (unsigned char) x1;
+            out += stride;
+        }
+        return;
+    }
+    x0 = (blk[0] << 8) + 8192;
+    x8 = W7 * (x4 + x5) + 4;
+    x4 = (x8 + (W1 - W7) * x4) >> 3;
+    x5 = (x8 - (W1 + W7) * x5) >> 3;
+    x8 = W3 * (x6 + x7) + 4;
+    x6 = (x8 - (W3 - W5) * x6) >> 3;
+    x7 = (x8 - (W3 + W5) * x7) >> 3;
+    x8 = x0 + x1;
+    x0 -= x1;
+    x1 = W6 * (x3 + x2) + 4;
+    x2 = (x1 - (W2 + W6) * x2) >> 3;
+    x3 = (x1 + (W2 - W6) * x3) >> 3;
+    x1 = x4 + x6;
+    x4 -= x6;
+    x6 = x5 + x7;
+    x5 -= x7;
+    x7 = x8 + x3;
+    x8 -= x3;
+    x3 = x0 + x2;
+    x0 -= x2;
+    x2 = (181 * (x4 + x5) + 128) >> 8;
+    x4 = (181 * (x4 - x5) + 128) >> 8;
+    *out = njClip(((x7 + x1) >> 14) + 128);  out += stride;
+    *out = njClip(((x3 + x2) >> 14) + 128);  out += stride;
+    *out = njClip(((x0 + x4) >> 14) + 128);  out += stride;
+    *out = njClip(((x8 + x6) >> 14) + 128);  out += stride;
+    *out = njClip(((x8 - x6) >> 14) + 128);  out += stride;
+    *out = njClip(((x0 - x4) >> 14) + 128);  out += stride;
+    *out = njClip(((x3 - x2) >> 14) + 128);  out += stride;
+    *out = njClip(((x7 - x1) >> 14) + 128);
+}
+
+#define njThrow(e) do { nj.error = e; return; } while (0)
+#define njCheckError() do { if (nj.error) return; } while (0)
+
+static int njShowBits(int bits) {
+    unsigned char newbyte;
+    if (!bits) return 0;
+    while (nj.bufbits < bits) {
+        if (nj.size <= 0) {
+            nj.buf = (nj.buf << 8) | 0xFF;
+            nj.bufbits += 8;
+            continue;
+        }
+        newbyte = *nj.pos++;
+        nj.size--;
+        nj.bufbits += 8;
+        nj.buf = (nj.buf << 8) | newbyte;
+        if (newbyte == 0xFF) {
+            if (nj.size) {
+                unsigned char marker = *nj.pos++;
+                nj.size--;
+                switch (marker) {
+                    case 0x00:
+                    case 0xFF:
+                        break;
+                    case 0xD9: nj.size = 0; break;
+                    default:
+                        if ((marker & 0xF8) != 0xD0)
+                            nj.error = NJ_SYNTAX_ERROR;
+                        else {
+                            nj.buf = (nj.buf << 8) | marker;
+                            nj.bufbits += 8;
+                        }
+                }
+            } else
+                nj.error = NJ_SYNTAX_ERROR;
+        }
+    }
+    return (nj.buf >> (nj.bufbits - bits)) & ((1 << bits) - 1);
+}
+
+NJ_INLINE void njSkipBits(int bits) {
+    if (nj.bufbits < bits)
+        (void) njShowBits(bits);
+    nj.bufbits -= bits;
+}
+
+NJ_INLINE int njGetBits(int bits) {
+    int res = njShowBits(bits);
+    njSkipBits(bits);
+    return res;
+}
+
+NJ_INLINE void njByteAlign(void) {
+    nj.bufbits &= 0xF8;
+}
+
+static void njSkip(int count) {
+    nj.pos += count;
+    nj.size -= count;
+    nj.length -= count;
+    if (nj.size < 0) nj.error = NJ_SYNTAX_ERROR;
+}
+
+NJ_INLINE unsigned short njDecode16(const unsigned char *pos) {
+    return (pos[0] << 8) | pos[1];
+}
+
+static void njDecodeLength(void) {
+    if (nj.size < 2) njThrow(NJ_SYNTAX_ERROR);
+    nj.length = njDecode16(nj.pos);
+    if (nj.length > nj.size) njThrow(NJ_SYNTAX_ERROR);
+    njSkip(2);
+}
+
+NJ_INLINE void njSkipMarker(void) {
+    njDecodeLength();
+    njSkip(nj.length);
+}
+
+NJ_INLINE void njDecodeSOF(void) {
+    int i, ssxmax = 0, ssymax = 0;
+    nj_component_t* c;
+    njDecodeLength();
+    if (nj.length < 9) njThrow(NJ_SYNTAX_ERROR);
+    if (nj.pos[0] != 8) njThrow(NJ_UNSUPPORTED);
+    nj.height = njDecode16(nj.pos+1);
+    nj.width = njDecode16(nj.pos+3);
+    nj.ncomp = nj.pos[5];
+    njSkip(6);
+    switch (nj.ncomp) {
+        case 1:
+        case 3:
+            break;
+        default:
+            njThrow(NJ_UNSUPPORTED);
+    }
+    if (nj.length < (nj.ncomp * 3)) njThrow(NJ_SYNTAX_ERROR);
+    for (i = 0, c = nj.comp;  i < nj.ncomp;  ++i, ++c) {
+        c->cid = nj.pos[0];
+        if (!(c->ssx = nj.pos[1] >> 4)) njThrow(NJ_SYNTAX_ERROR);
+        if (c->ssx & (c->ssx - 1)) njThrow(NJ_UNSUPPORTED);  // non-power of two
+        if (!(c->ssy = nj.pos[1] & 15)) njThrow(NJ_SYNTAX_ERROR);
+        if (c->ssy & (c->ssy - 1)) njThrow(NJ_UNSUPPORTED);  // non-power of two
+        if ((c->qtsel = nj.pos[2]) & 0xFC) njThrow(NJ_SYNTAX_ERROR);
+        njSkip(3);
+        nj.qtused |= 1 << c->qtsel;
+        if (c->ssx > ssxmax) ssxmax = c->ssx;
+        if (c->ssy > ssymax) ssymax = c->ssy;
+    }
+    if (nj.ncomp == 1) {
+        c = nj.comp;
+        c->ssx = c->ssy = ssxmax = ssymax = 1;
+    }
+    nj.mbsizex = ssxmax << 3;
+    nj.mbsizey = ssymax << 3;
+    nj.mbwidth = (nj.width + nj.mbsizex - 1) / nj.mbsizex;
+    nj.mbheight = (nj.height + nj.mbsizey - 1) / nj.mbsizey;
+    for (i = 0, c = nj.comp;  i < nj.ncomp;  ++i, ++c) {
+        c->width = (nj.width * c->ssx + ssxmax - 1) / ssxmax;
+        c->height = (nj.height * c->ssy + ssymax - 1) / ssymax;
+        c->stride = nj.mbwidth * c->ssx << 3;
+        if (((c->width < 3) && (c->ssx != ssxmax)) || ((c->height < 3) && (c->ssy != ssymax))) njThrow(NJ_UNSUPPORTED);
+        if (!(c->pixels = njAllocMem(c->stride * nj.mbheight * c->ssy << 3))) njThrow(NJ_OUT_OF_MEM);
+    }
+    if (nj.ncomp == 3) {
+        nj.rgb = njAllocMem(nj.width * nj.height * nj.ncomp);
+        if (!nj.rgb) njThrow(NJ_OUT_OF_MEM);
+    }
+    njSkip(nj.length);
+}
+
+NJ_INLINE void njDecodeDHT(void) {
+    int codelen, currcnt, remain, spread, i, j;
+    nj_vlc_code_t *vlc;
+    static unsigned char counts[16];
+    njDecodeLength();
+    while (nj.length >= 17) {
+        i = nj.pos[0];
+        if (i & 0xEC) njThrow(NJ_SYNTAX_ERROR);
+        if (i & 0x02) njThrow(NJ_UNSUPPORTED);
+        i = (i | (i >> 3)) & 3;  // combined DC/AC + tableid value
+        for (codelen = 1;  codelen <= 16;  ++codelen)
+            counts[codelen - 1] = nj.pos[codelen];
+        njSkip(17);
+        vlc = &nj.vlctab[i][0];
+        remain = spread = 65536;
+        for (codelen = 1;  codelen <= 16;  ++codelen) {
+            spread >>= 1;
+            currcnt = counts[codelen - 1];
+            if (!currcnt) continue;
+            if (nj.length < currcnt) njThrow(NJ_SYNTAX_ERROR);
+            remain -= currcnt << (16 - codelen);
+            if (remain < 0) njThrow(NJ_SYNTAX_ERROR);
+            for (i = 0;  i < currcnt;  ++i) {
+                register unsigned char code = nj.pos[i];
+                for (j = spread;  j;  --j) {
+                    vlc->bits = (unsigned char) codelen;
+                    vlc->code = code;
+                    ++vlc;
+                }
+            }
+            njSkip(currcnt);
+        }
+        while (remain--) {
+            vlc->bits = 0;
+            ++vlc;
+        }
+    }
+    if (nj.length) njThrow(NJ_SYNTAX_ERROR);
+}
+
+NJ_INLINE void njDecodeDQT(void) {
+    int i;
+    unsigned char *t;
+    njDecodeLength();
+    while (nj.length >= 65) {
+        i = nj.pos[0];
+        if (i & 0xFC) njThrow(NJ_SYNTAX_ERROR);
+        nj.qtavail |= 1 << i;
+        t = &nj.qtab[i][0];
+        for (i = 0;  i < 64;  ++i)
+            t[i] = nj.pos[i + 1];
+        njSkip(65);
+    }
+    if (nj.length) njThrow(NJ_SYNTAX_ERROR);
+}
+
+NJ_INLINE void njDecodeDRI(void) {
+    njDecodeLength();
+    if (nj.length < 2) njThrow(NJ_SYNTAX_ERROR);
+    nj.rstinterval = njDecode16(nj.pos);
+    njSkip(nj.length);
+}
+
+static int njGetVLC(nj_vlc_code_t* vlc, unsigned char* code) {
+    int value = njShowBits(16);
+    int bits = vlc[value].bits;
+    if (!bits) { nj.error = NJ_SYNTAX_ERROR; return 0; }
+    njSkipBits(bits);
+    value = vlc[value].code;
+    if (code) *code = (unsigned char) value;
+    bits = value & 15;
+    if (!bits) return 0;
+    value = njGetBits(bits);
+    if (value < (1 << (bits - 1)))
+        value += ((-1) << bits) + 1;
+    return value;
+}
+
+NJ_INLINE void njDecodeBlock(nj_component_t* c, unsigned char* out) {
+    unsigned char code = 0;
+    int value, coef = 0;
+    njFillMem(nj.block, 0, sizeof(nj.block));
+    c->dcpred += njGetVLC(&nj.vlctab[c->dctabsel][0], NULL);
+    nj.block[0] = (c->dcpred) * nj.qtab[c->qtsel][0];
+    do {
+        value = njGetVLC(&nj.vlctab[c->actabsel][0], &code);
+        if (!code) break;  // EOB
+        if (!(code & 0x0F) && (code != 0xF0)) njThrow(NJ_SYNTAX_ERROR);
+        coef += (code >> 4) + 1;
+        if (coef > 63) njThrow(NJ_SYNTAX_ERROR);
+        nj.block[(int) njZZ[coef]] = value * nj.qtab[c->qtsel][coef];
+    } while (coef < 63);
+    for (coef = 0;  coef < 64;  coef += 8)
+        njRowIDCT(&nj.block[coef]);
+    for (coef = 0;  coef < 8;  ++coef)
+        njColIDCT(&nj.block[coef], &out[coef], c->stride);
+}
+
+NJ_INLINE void njDecodeScan(void) {
+    int i, mbx, mby, sbx, sby;
+    int rstcount = nj.rstinterval, nextrst = 0;
+    nj_component_t* c;
+    njDecodeLength();
+    if (nj.length < (4 + 2 * nj.ncomp)) njThrow(NJ_SYNTAX_ERROR);
+    if (nj.pos[0] != nj.ncomp) njThrow(NJ_UNSUPPORTED);
+    njSkip(1);
+    for (i = 0, c = nj.comp;  i < nj.ncomp;  ++i, ++c) {
+        if (nj.pos[0] != c->cid) njThrow(NJ_SYNTAX_ERROR);
+        if (nj.pos[1] & 0xEE) njThrow(NJ_SYNTAX_ERROR);
+        c->dctabsel = nj.pos[1] >> 4;
+        c->actabsel = (nj.pos[1] & 1) | 2;
+        njSkip(2);
+    }
+    if (nj.pos[0] || (nj.pos[1] != 63) || nj.pos[2]) njThrow(NJ_UNSUPPORTED);
+    njSkip(nj.length);
+    for (mbx = mby = 0;;) {
+        for (i = 0, c = nj.comp;  i < nj.ncomp;  ++i, ++c)
+            for (sby = 0;  sby < c->ssy;  ++sby)
+                for (sbx = 0;  sbx < c->ssx;  ++sbx) {
+                    njDecodeBlock(c, &c->pixels[((mby * c->ssy + sby) * c->stride + mbx * c->ssx + sbx) << 3]);
+                    njCheckError();
+                }
+        if (++mbx >= nj.mbwidth) {
+            mbx = 0;
+            if (++mby >= nj.mbheight) break;
+        }
+        if (nj.rstinterval && !(--rstcount)) {
+            njByteAlign();
+            i = njGetBits(16);
+            if (((i & 0xFFF8) != 0xFFD0) || ((i & 7) != nextrst)) njThrow(NJ_SYNTAX_ERROR);
+            nextrst = (nextrst + 1) & 7;
+            rstcount = nj.rstinterval;
+            for (i = 0;  i < 3;  ++i)
+                nj.comp[i].dcpred = 0;
+        }
+    }
+    nj.error = __NJ_FINISHED;
+}
+
+#if NJ_CHROMA_FILTER
+
+#define CF4A (-9)
+#define CF4B (111)
+#define CF4C (29)
+#define CF4D (-3)
+#define CF3A (28)
+#define CF3B (109)
+#define CF3C (-9)
+#define CF3X (104)
+#define CF3Y (27)
+#define CF3Z (-3)
+#define CF2A (139)
+#define CF2B (-11)
+#define CF(x) njClip(((x) + 64) >> 7)
+
+NJ_INLINE void njUpsampleH(nj_component_t* c) {
+    const int xmax = c->width - 3;
+    unsigned char *out, *lin, *lout;
+    int x, y;
+    out = njAllocMem((c->width * c->height) << 1);
+    if (!out) njThrow(NJ_OUT_OF_MEM);
+    lin = c->pixels;
+    lout = out;
+    for (y = c->height;  y;  --y) {
+        lout[0] = CF(CF2A * lin[0] + CF2B * lin[1]);
+        lout[1] = CF(CF3X * lin[0] + CF3Y * lin[1] + CF3Z * lin[2]);
+        lout[2] = CF(CF3A * lin[0] + CF3B * lin[1] + CF3C * lin[2]);
+        for (x = 0;  x < xmax;  ++x) {
+            lout[(x << 1) + 3] = CF(CF4A * lin[x] + CF4B * lin[x + 1] + CF4C * lin[x + 2] + CF4D * lin[x + 3]);
+            lout[(x << 1) + 4] = CF(CF4D * lin[x] + CF4C * lin[x + 1] + CF4B * lin[x + 2] + CF4A * lin[x + 3]);
+        }
+        lin += c->stride;
+        lout += c->width << 1;
+        lout[-3] = CF(CF3A * lin[-1] + CF3B * lin[-2] + CF3C * lin[-3]);
+        lout[-2] = CF(CF3X * lin[-1] + CF3Y * lin[-2] + CF3Z * lin[-3]);
+        lout[-1] = CF(CF2A * lin[-1] + CF2B * lin[-2]);
+    }
+    c->width <<= 1;
+    c->stride = c->width;
+    njFreeMem(c->pixels);
+    c->pixels = out;
+}
+
+NJ_INLINE void njUpsampleV(nj_component_t* c) {
+    const int w = c->width, s1 = c->stride, s2 = s1 + s1;
+    unsigned char *out, *cin, *cout;
+    int x, y;
+    out = njAllocMem((c->width * c->height) << 1);
+    if (!out) njThrow(NJ_OUT_OF_MEM);
+    for (x = 0;  x < w;  ++x) {
+        cin = &c->pixels[x];
+        cout = &out[x];
+        *cout = CF(CF2A * cin[0] + CF2B * cin[s1]);  cout += w;
+        *cout = CF(CF3X * cin[0] + CF3Y * cin[s1] + CF3Z * cin[s2]);  cout += w;
+        *cout = CF(CF3A * cin[0] + CF3B * cin[s1] + CF3C * cin[s2]);  cout += w;
+        cin += s1;
+        for (y = c->height - 3;  y;  --y) {
+            *cout = CF(CF4A * cin[-s1] + CF4B * cin[0] + CF4C * cin[s1] + CF4D * cin[s2]);  cout += w;
+            *cout = CF(CF4D * cin[-s1] + CF4C * cin[0] + CF4B * cin[s1] + CF4A * cin[s2]);  cout += w;
+            cin += s1;
+        }
+        cin += s1;
+        *cout = CF(CF3A * cin[0] + CF3B * cin[-s1] + CF3C * cin[-s2]);  cout += w;
+        *cout = CF(CF3X * cin[0] + CF3Y * cin[-s1] + CF3Z * cin[-s2]);  cout += w;
+        *cout = CF(CF2A * cin[0] + CF2B * cin[-s1]);
+    }
+    c->height <<= 1;
+    c->stride = c->width;
+    njFreeMem(c->pixels);
+    c->pixels = out;
+}
+
+#else
+
+NJ_INLINE void njUpsample(nj_component_t* c) {
+    int x, y, xshift = 0, yshift = 0;
+    unsigned char *out, *lin, *lout;
+    while (c->width < nj.width) { c->width <<= 1; ++xshift; }
+    while (c->height < nj.height) { c->height <<= 1; ++yshift; }
+    out = njAllocMem(c->width * c->height);
+    if (!out) njThrow(NJ_OUT_OF_MEM);
+    lin = c->pixels;
+    lout = out;
+    for (y = 0;  y < c->height;  ++y) {
+        lin = &c->pixels[(y >> yshift) * c->stride];
+        for (x = 0;  x < c->width;  ++x)
+            lout[x] = lin[x >> xshift];
+        lout += c->width;
+    }
+    c->stride = c->width;
+    njFreeMem(c->pixels);
+    c->pixels = out;
+}
+
+#endif
+
+NJ_INLINE void njConvert(void) {
+    int i;
+    nj_component_t* c;
+    for (i = 0, c = nj.comp;  i < nj.ncomp;  ++i, ++c) {
+        #if NJ_CHROMA_FILTER
+            while ((c->width < nj.width) || (c->height < nj.height)) {
+                if (c->width < nj.width) njUpsampleH(c);
+                njCheckError();
+                if (c->height < nj.height) njUpsampleV(c);
+                njCheckError();
+            }
+        #else
+            if ((c->width < nj.width) || (c->height < nj.height))
+                njUpsample(c);
+        #endif
+        if ((c->width < nj.width) || (c->height < nj.height)) njThrow(NJ_INTERNAL_ERR);
+    }
+    if (nj.ncomp == 3) {
+        // convert to RGB
+        int x, yy;
+        unsigned char *prgb = nj.rgb;
+        const unsigned char *py  = nj.comp[0].pixels;
+        const unsigned char *pcb = nj.comp[1].pixels;
+        const unsigned char *pcr = nj.comp[2].pixels;
+        for (yy = nj.height;  yy;  --yy) {
+            for (x = 0;  x < nj.width;  ++x) {
+                register int y = py[x] << 8;
+                register int cb = pcb[x] - 128;
+                register int cr = pcr[x] - 128;
+                *prgb++ = njClip((y            + 359 * cr + 128) >> 8);
+                *prgb++ = njClip((y -  88 * cb - 183 * cr + 128) >> 8);
+                *prgb++ = njClip((y + 454 * cb            + 128) >> 8);
+            }
+            py += nj.comp[0].stride;
+            pcb += nj.comp[1].stride;
+            pcr += nj.comp[2].stride;
+        }
+    } else if (nj.comp[0].width != nj.comp[0].stride) {
+        // grayscale -> only remove stride
+        unsigned char *pin = &nj.comp[0].pixels[nj.comp[0].stride];
+        unsigned char *pout = &nj.comp[0].pixels[nj.comp[0].width];
+        int y;
+        for (y = nj.comp[0].height - 1;  y;  --y) {
+            njCopyMem(pout, pin, nj.comp[0].width);
+            pin += nj.comp[0].stride;
+            pout += nj.comp[0].width;
+        }
+        nj.comp[0].stride = nj.comp[0].width;
+    }
+}
+
+void njInit(void) {
+    njFillMem(&nj, 0, sizeof(nj_context_t));
+}
+
+void njDone(void) {
+    int i;
+    for (i = 0;  i < 3;  ++i)
+        if (nj.comp[i].pixels) njFreeMem((void*) nj.comp[i].pixels);
+    if (nj.rgb) njFreeMem((void*) nj.rgb);
+    njInit();
+}
+
+nj_result_t njDecode(const void* jpeg, const int size) {
+    njDone();
+    nj.pos = (const unsigned char*) jpeg;
+    nj.size = size & 0x7FFFFFFF;
+    if (nj.size < 2) return NJ_NO_JPEG;
+    if ((nj.pos[0] ^ 0xFF) | (nj.pos[1] ^ 0xD8)) return NJ_NO_JPEG;
+    njSkip(2);
+    while (!nj.error) {
+        if ((nj.size < 2) || (nj.pos[0] != 0xFF)) return NJ_SYNTAX_ERROR;
+        njSkip(2);
+        switch (nj.pos[-1]) {
+            case 0xC0: njDecodeSOF();  break;
+            case 0xC4: njDecodeDHT();  break;
+            case 0xDB: njDecodeDQT();  break;
+            case 0xDD: njDecodeDRI();  break;
+            case 0xDA: njDecodeScan(); break;
+            case 0xFE: njSkipMarker(); break;
+            default:
+                if ((nj.pos[-1] & 0xF0) == 0xE0)
+                    njSkipMarker();
+                else
+                    return NJ_UNSUPPORTED;
+        }
+    }
+    if (nj.error != __NJ_FINISHED) return nj.error;
+    nj.error = NJ_OK;
+    njConvert();
+    return nj.error;
+}
+
+int njGetWidth(void)            { return nj.width; }
+int njGetHeight(void)           { return nj.height; }
+int njIsColor(void)             { return (nj.ncomp != 1); }
+unsigned char* njGetImage(void) { return (nj.ncomp == 1) ? nj.comp[0].pixels : nj.rgb; }
+int njGetImageSize(void)        { return nj.width * nj.height * nj.ncomp; }
+
+#endif // _NJ_INCLUDE_HEADER_ONLY
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-align-loop-iterations-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-align-loop-iterations-0.c
new file mode 100644
index 0000000..071acd9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-align-loop-iterations-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=align-loop-iterations=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-align-threshold-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-align-threshold-1.c
new file mode 100644
index 0000000..7116e64
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-align-threshold-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=align-threshold=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-allow-store-data-races-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-allow-store-data-races-0.c
new file mode 100644
index 0000000..1218418
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-allow-store-data-races-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=allow-store-data-races=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-allow-store-data-races-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-allow-store-data-races-1.c
new file mode 100644
index 0000000..a76c520
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-allow-store-data-races-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=allow-store-data-races=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-globals-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-globals-0.c
new file mode 100644
index 0000000..b0e946f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-globals-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-globals=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-globals-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-globals-1.c
new file mode 100644
index 0000000..3b01bcb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-globals-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-globals=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-reads-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-reads-0.c
new file mode 100644
index 0000000..aedc194
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-reads-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-instrument-reads=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-reads-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-reads-1.c
new file mode 100644
index 0000000..da0286a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-reads-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-instrument-reads=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-writes-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-writes-0.c
new file mode 100644
index 0000000..e6eb4b1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-writes-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-instrument-writes=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-writes-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-writes-1.c
new file mode 100644
index 0000000..6251e51
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrument-writes-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-instrument-writes=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrumentation-with-call-threshold-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrumentation-with-call-threshold-0.c
new file mode 100644
index 0000000..56008fc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrumentation-with-call-threshold-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-instrumentation-with-call-threshold=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrumentation-with-call-threshold-2147483647.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrumentation-with-call-threshold-2147483647.c
new file mode 100644
index 0000000..6a8c6bc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-instrumentation-with-call-threshold-2147483647.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-instrumentation-with-call-threshold=2147483647" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-memintrin-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-memintrin-0.c
new file mode 100644
index 0000000..979f7d9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-memintrin-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-memintrin=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-memintrin-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-memintrin-1.c
new file mode 100644
index 0000000..7bb836c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-memintrin-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-memintrin=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-stack-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-stack-0.c
new file mode 100644
index 0000000..3bcb2c7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-stack-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-stack=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-stack-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-stack-1.c
new file mode 100644
index 0000000..349941d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-stack-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-stack=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-use-after-return-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-use-after-return-0.c
new file mode 100644
index 0000000..e930bda
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-use-after-return-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-use-after-return=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-asan-use-after-return-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-asan-use-after-return-1.c
new file mode 100644
index 0000000..f994a66
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-asan-use-after-return-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=asan-use-after-return=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-builtin-expect-probability-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-builtin-expect-probability-0.c
new file mode 100644
index 0000000..3b322d4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-builtin-expect-probability-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=builtin-expect-probability=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-builtin-expect-probability-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-builtin-expect-probability-100.c
new file mode 100644
index 0000000..9a0ebc1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-builtin-expect-probability-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=builtin-expect-probability=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-case-values-threshold-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-case-values-threshold-0.c
new file mode 100644
index 0000000..c00c545
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-case-values-threshold-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=case-values-threshold=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-chkp-max-ctor-size-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-chkp-max-ctor-size-100.c
new file mode 100644
index 0000000..21bd977
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-chkp-max-ctor-size-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=chkp-max-ctor-size=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-comdat-sharing-probability-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-comdat-sharing-probability-0.c
new file mode 100644
index 0000000..bf4d59c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-comdat-sharing-probability-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=comdat-sharing-probability=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-cxx-max-namespaces-for-diagnostic-help-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-cxx-max-namespaces-for-diagnostic-help-0.c
new file mode 100644
index 0000000..99030c4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-cxx-max-namespaces-for-diagnostic-help-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=cxx-max-namespaces-for-diagnostic-help=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-early-inlining-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-early-inlining-insns-0.c
new file mode 100644
index 0000000..55a1aac
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-early-inlining-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=early-inlining-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-fsm-maximum-phi-arguments-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-maximum-phi-arguments-1.c
new file mode 100644
index 0000000..25859ea
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-maximum-phi-arguments-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=fsm-maximum-phi-arguments=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-fsm-maximum-phi-arguments-999999.c b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-maximum-phi-arguments-999999.c
new file mode 100644
index 0000000..25be9c7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-maximum-phi-arguments-999999.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=fsm-maximum-phi-arguments=999999" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-blocks-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-blocks-1.c
new file mode 100644
index 0000000..df1295d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-blocks-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=fsm-scale-path-blocks=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-blocks-10.c b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-blocks-10.c
new file mode 100644
index 0000000..425d8bd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-blocks-10.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=fsm-scale-path-blocks=10" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-stmts-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-stmts-1.c
new file mode 100644
index 0000000..d9fc970
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-stmts-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=fsm-scale-path-stmts=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-stmts-10.c b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-stmts-10.c
new file mode 100644
index 0000000..8216c5f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-fsm-scale-path-stmts-10.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=fsm-scale-path-stmts=10" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-gcse-after-reload-critical-fraction-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-gcse-after-reload-critical-fraction-0.c
new file mode 100644
index 0000000..f5bbcdd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-gcse-after-reload-critical-fraction-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=gcse-after-reload-critical-fraction=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-gcse-after-reload-partial-fraction-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-gcse-after-reload-partial-fraction-0.c
new file mode 100644
index 0000000..69f16dc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-gcse-after-reload-partial-fraction-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=gcse-after-reload-partial-fraction=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-gcse-cost-distance-ratio-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-gcse-cost-distance-ratio-0.c
new file mode 100644
index 0000000..2766520
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-gcse-cost-distance-ratio-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=gcse-cost-distance-ratio=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-gcse-unrestricted-cost-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-gcse-unrestricted-cost-0.c
new file mode 100644
index 0000000..163c102
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-gcse-unrestricted-cost-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=gcse-unrestricted-cost=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ggc-min-expand-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ggc-min-expand-0.c
new file mode 100644
index 0000000..3329c8c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ggc-min-expand-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ggc-min-expand=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ggc-min-heapsize-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ggc-min-heapsize-0.c
new file mode 100644
index 0000000..5fd6db7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ggc-min-heapsize-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ggc-min-heapsize=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-arrays-per-scop-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-arrays-per-scop-0.c
new file mode 100644
index 0000000..f762a12
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-arrays-per-scop-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=graphite-max-arrays-per-scop=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-bbs-per-function-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-bbs-per-function-0.c
new file mode 100644
index 0000000..c70ef1b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-bbs-per-function-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=graphite-max-bbs-per-function=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-nb-scop-params-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-nb-scop-params-0.c
new file mode 100644
index 0000000..c67b42b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-graphite-max-nb-scop-params-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=graphite-max-nb-scop-params=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-graphite-min-loops-per-function-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-graphite-min-loops-per-function-0.c
new file mode 100644
index 0000000..3904e89
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-graphite-min-loops-per-function-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=graphite-min-loops-per-function=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-count-ws-permille-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-count-ws-permille-0.c
new file mode 100644
index 0000000..0650019
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-count-ws-permille-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=hot-bb-count-ws-permille=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-count-ws-permille-1000.c b/gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-count-ws-permille-1000.c
new file mode 100644
index 0000000..21e9019
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-count-ws-permille-1000.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=hot-bb-count-ws-permille=1000" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-frequency-fraction-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-frequency-fraction-0.c
new file mode 100644
index 0000000..945ca11
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-hot-bb-frequency-fraction-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=hot-bb-frequency-fraction=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-hsa-gen-debug-stores-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-hsa-gen-debug-stores-0.c
new file mode 100644
index 0000000..ee96a1b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-hsa-gen-debug-stores-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=hsa-gen-debug-stores=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-hsa-gen-debug-stores-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-hsa-gen-debug-stores-1.c
new file mode 100644
index 0000000..c122403
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-hsa-gen-debug-stores-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=hsa-gen-debug-stores=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-indir-call-topn-profile-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-indir-call-topn-profile-0.c
new file mode 100644
index 0000000..bba51ce
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-indir-call-topn-profile-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=indir-call-topn-profile=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-indir-call-topn-profile-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-indir-call-topn-profile-1.c
new file mode 100644
index 0000000..74cc0b0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-indir-call-topn-profile-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=indir-call-topn-profile=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-inline-min-speedup-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-inline-min-speedup-0.c
new file mode 100644
index 0000000..61bc2fa
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-inline-min-speedup-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=inline-min-speedup=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-inline-unit-growth-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-inline-unit-growth-0.c
new file mode 100644
index 0000000..737fc85
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-inline-unit-growth-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=inline-unit-growth=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-integer-share-limit-2.c b/gcc/testsuite/gcc.dg/params/param-boundary-integer-share-limit-2.c
new file mode 100644
index 0000000..146efce
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-integer-share-limit-2.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=integer-share-limit=2" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-array-index-hint-bonus-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-array-index-hint-bonus-0.c
new file mode 100644
index 0000000..6dc4a4e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-array-index-hint-bonus-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipa-cp-array-index-hint-bonus=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-eval-threshold-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-eval-threshold-0.c
new file mode 100644
index 0000000..1678540
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-eval-threshold-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipa-cp-eval-threshold=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-loop-hint-bonus-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-loop-hint-bonus-0.c
new file mode 100644
index 0000000..e5c855b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-loop-hint-bonus-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipa-cp-loop-hint-bonus=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-recursion-penalty-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-recursion-penalty-0.c
new file mode 100644
index 0000000..c50b130
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-recursion-penalty-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipa-cp-recursion-penalty=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-recursion-penalty-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-recursion-penalty-100.c
new file mode 100644
index 0000000..1ff8ea6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-recursion-penalty-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipa-cp-recursion-penalty=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-single-call-penalty-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-single-call-penalty-0.c
new file mode 100644
index 0000000..0ad7003
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-single-call-penalty-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipa-cp-single-call-penalty=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-single-call-penalty-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-single-call-penalty-100.c
new file mode 100644
index 0000000..ce83790
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-single-call-penalty-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipa-cp-single-call-penalty=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-value-list-size-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-value-list-size-0.c
new file mode 100644
index 0000000..867b831
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-cp-value-list-size-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipa-cp-value-list-size=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipa-max-aa-steps-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-max-aa-steps-0.c
new file mode 100644
index 0000000..c3ef674
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-max-aa-steps-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipa-max-aa-steps=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipa-max-agg-items-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-max-agg-items-0.c
new file mode 100644
index 0000000..39cb6aa
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-max-agg-items-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipa-max-agg-items=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipa-sra-ptr-growth-factor-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-sra-ptr-growth-factor-0.c
new file mode 100644
index 0000000..7d01236
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipa-sra-ptr-growth-factor-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipa-sra-ptr-growth-factor=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ipcp-unit-growth-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ipcp-unit-growth-0.c
new file mode 100644
index 0000000..19f4396
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ipcp-unit-growth-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ipcp-unit-growth=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ira-loop-reserved-regs-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ira-loop-reserved-regs-0.c
new file mode 100644
index 0000000..a147406
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ira-loop-reserved-regs-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ira-loop-reserved-regs=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ira-max-conflict-table-size-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ira-max-conflict-table-size-0.c
new file mode 100644
index 0000000..ec6a4cc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ira-max-conflict-table-size-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ira-max-conflict-table-size=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ira-max-loops-num-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-ira-max-loops-num-0.c
new file mode 100644
index 0000000..121e986
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ira-max-loops-num-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ira-max-loops-num=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-iv-always-prune-cand-set-bound-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-iv-always-prune-cand-set-bound-0.c
new file mode 100644
index 0000000..6cd9c3f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-iv-always-prune-cand-set-bound-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=iv-always-prune-cand-set-bound=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-iv-consider-all-candidates-bound-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-iv-consider-all-candidates-bound-0.c
new file mode 100644
index 0000000..b7758bd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-iv-consider-all-candidates-bound-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=iv-consider-all-candidates-bound=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-iv-max-considered-uses-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-iv-max-considered-uses-0.c
new file mode 100644
index 0000000..6dbf816
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-iv-max-considered-uses-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=iv-max-considered-uses=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-l1-cache-line-size-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-l1-cache-line-size-0.c
new file mode 100644
index 0000000..2adf68a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-l1-cache-line-size-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=l1-cache-line-size=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-l1-cache-size-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-l1-cache-size-0.c
new file mode 100644
index 0000000..5848cef
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-l1-cache-size-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=l1-cache-size=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-l2-cache-size-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-l2-cache-size-0.c
new file mode 100644
index 0000000..6c63110
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-l2-cache-size-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=l2-cache-size=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-large-function-growth-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-large-function-growth-0.c
new file mode 100644
index 0000000..95c1fa8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-large-function-growth-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=large-function-growth=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-large-function-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-large-function-insns-0.c
new file mode 100644
index 0000000..140e986
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-large-function-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=large-function-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-large-stack-frame-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-large-stack-frame-0.c
new file mode 100644
index 0000000..503c25c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-large-stack-frame-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=large-stack-frame=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-large-stack-frame-growth-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-large-stack-frame-growth-0.c
new file mode 100644
index 0000000..0e4e61f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-large-stack-frame-growth-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=large-stack-frame-growth=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-large-unit-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-large-unit-insns-0.c
new file mode 100644
index 0000000..5918a58
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-large-unit-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=large-unit-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-lim-expensive-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-lim-expensive-0.c
new file mode 100644
index 0000000..b212fcd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-lim-expensive-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=lim-expensive=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-loop-block-tile-size-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-loop-block-tile-size-0.c
new file mode 100644
index 0000000..da1845a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-loop-block-tile-size-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=loop-block-tile-size=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-loop-invariant-max-bbs-in-loop-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-loop-invariant-max-bbs-in-loop-0.c
new file mode 100644
index 0000000..3649f23
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-loop-invariant-max-bbs-in-loop-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=loop-invariant-max-bbs-in-loop=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-loop-max-datarefs-for-datadeps-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-loop-max-datarefs-for-datadeps-0.c
new file mode 100644
index 0000000..bd79065
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-loop-max-datarefs-for-datadeps-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=loop-max-datarefs-for-datadeps=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-lra-inheritance-ebb-probability-cutoff-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-lra-inheritance-ebb-probability-cutoff-0.c
new file mode 100644
index 0000000..67dd2c9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-lra-inheritance-ebb-probability-cutoff-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=lra-inheritance-ebb-probability-cutoff=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-lra-inheritance-ebb-probability-cutoff-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-lra-inheritance-ebb-probability-cutoff-100.c
new file mode 100644
index 0000000..3d0baf3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-lra-inheritance-ebb-probability-cutoff-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=lra-inheritance-ebb-probability-cutoff=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-lra-max-considered-reload-pseudos-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-lra-max-considered-reload-pseudos-0.c
new file mode 100644
index 0000000..8266ce0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-lra-max-considered-reload-pseudos-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=lra-max-considered-reload-pseudos=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-lto-max-partition-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-lto-max-partition-0.c
new file mode 100644
index 0000000..6389c61
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-lto-max-partition-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=lto-max-partition=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-lto-max-partition-2147483647.c b/gcc/testsuite/gcc.dg/params/param-boundary-lto-max-partition-2147483647.c
new file mode 100644
index 0000000..ce6ba90
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-lto-max-partition-2147483647.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=lto-max-partition=2147483647" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-lto-min-partition-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-lto-min-partition-0.c
new file mode 100644
index 0000000..193f5ac
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-lto-min-partition-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=lto-min-partition=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-lto-partitions-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-lto-partitions-1.c
new file mode 100644
index 0000000..dba89d4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-lto-partitions-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=lto-partitions=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-average-unrolled-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-average-unrolled-insns-0.c
new file mode 100644
index 0000000..2acc2cf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-average-unrolled-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-average-unrolled-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-combine-insns-2.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-combine-insns-2.c
new file mode 100644
index 0000000..3709af3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-combine-insns-2.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-combine-insns=2" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-combine-insns-4.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-combine-insns-4.c
new file mode 100644
index 0000000..75483ce
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-combine-insns-4.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-combine-insns=4" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peel-loop-nest-depth-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peel-loop-nest-depth-0.c
new file mode 100644
index 0000000..33ba992
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peel-loop-nest-depth-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-completely-peel-loop-nest-depth=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peel-times-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peel-times-0.c
new file mode 100644
index 0000000..86f893c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peel-times-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-completely-peel-times=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peeled-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peeled-insns-0.c
new file mode 100644
index 0000000..2c416c7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-completely-peeled-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-completely-peeled-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-crossjump-edges-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-crossjump-edges-0.c
new file mode 100644
index 0000000..8dd82a4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-crossjump-edges-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-crossjump-edges=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-cse-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-cse-insns-0.c
new file mode 100644
index 0000000..200479d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-cse-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-cse-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-cse-path-length-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-cse-path-length-1.c
new file mode 100644
index 0000000..18a2136
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-cse-path-length-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-cse-path-length=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-cselib-memory-locations-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-cselib-memory-locations-0.c
new file mode 100644
index 0000000..6d1e6f1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-cselib-memory-locations-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-cselib-memory-locations=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-delay-slot-insn-search-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-delay-slot-insn-search-0.c
new file mode 100644
index 0000000..df7be08
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-delay-slot-insn-search-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-delay-slot-insn-search=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-delay-slot-live-search-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-delay-slot-live-search-0.c
new file mode 100644
index 0000000..8363d60
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-delay-slot-live-search-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-delay-slot-live-search=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-dse-active-local-stores-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-dse-active-local-stores-0.c
new file mode 100644
index 0000000..ecd72f8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-dse-active-local-stores-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-dse-active-local-stores=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-early-inliner-iterations-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-early-inliner-iterations-0.c
new file mode 100644
index 0000000..f48429b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-early-inliner-iterations-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-early-inliner-iterations=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-fields-for-field-sensitive-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-fields-for-field-sensitive-0.c
new file mode 100644
index 0000000..f4ba2e2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-fields-for-field-sensitive-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-fields-for-field-sensitive=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-length-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-length-1.c
new file mode 100644
index 0000000..eda6e38
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-length-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-fsm-thread-length=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-length-999999.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-length-999999.c
new file mode 100644
index 0000000..80d6e1c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-length-999999.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-fsm-thread-length=999999" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-path-insns-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-path-insns-1.c
new file mode 100644
index 0000000..6cc1257
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-path-insns-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-fsm-thread-path-insns=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-path-insns-999999.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-path-insns-999999.c
new file mode 100644
index 0000000..c40a7d9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-path-insns-999999.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-fsm-thread-path-insns=999999" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-paths-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-paths-1.c
new file mode 100644
index 0000000..6caf043
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-paths-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-fsm-thread-paths=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-paths-999999.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-paths-999999.c
new file mode 100644
index 0000000..a1ab6a8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-fsm-thread-paths-999999.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-fsm-thread-paths=999999" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-gcse-insertion-ratio-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-gcse-insertion-ratio-0.c
new file mode 100644
index 0000000..07a451a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-gcse-insertion-ratio-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-gcse-insertion-ratio=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-gcse-memory-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-gcse-memory-0.c
new file mode 100644
index 0000000..3c35951
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-gcse-memory-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-gcse-memory=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-goto-duplication-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-goto-duplication-insns-0.c
new file mode 100644
index 0000000..fc84b33
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-goto-duplication-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-goto-duplication-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-grow-copy-bb-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-grow-copy-bb-insns-0.c
new file mode 100644
index 0000000..589a5e6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-grow-copy-bb-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-grow-copy-bb-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-hoist-depth-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-hoist-depth-0.c
new file mode 100644
index 0000000..54458a2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-hoist-depth-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-hoist-depth=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-auto-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-auto-0.c
new file mode 100644
index 0000000..0aefd14
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-auto-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-inline-insns-auto=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-recursive-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-recursive-0.c
new file mode 100644
index 0000000..de30bb1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-recursive-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-inline-insns-recursive=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-recursive-auto-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-recursive-auto-0.c
new file mode 100644
index 0000000..311ebe9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-recursive-auto-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-inline-insns-recursive-auto=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-single-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-single-0.c
new file mode 100644
index 0000000..1e2f60d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-insns-single-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-inline-insns-single=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-recursive-depth-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-recursive-depth-0.c
new file mode 100644
index 0000000..debc15e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-recursive-depth-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-inline-recursive-depth=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-recursive-depth-auto-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-recursive-depth-auto-0.c
new file mode 100644
index 0000000..51fe86b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-inline-recursive-depth-auto-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-inline-recursive-depth-auto=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-isl-operations-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-isl-operations-0.c
new file mode 100644
index 0000000..249cacb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-isl-operations-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-isl-operations=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-iterations-computation-cost-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-iterations-computation-cost-0.c
new file mode 100644
index 0000000..928e72c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-iterations-computation-cost-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-iterations-computation-cost=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-iterations-to-track-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-iterations-to-track-0.c
new file mode 100644
index 0000000..43f30e3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-iterations-to-track-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-iterations-to-track=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-jump-thread-duplication-stmts-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-jump-thread-duplication-stmts-0.c
new file mode 100644
index 0000000..c7bb6e1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-jump-thread-duplication-stmts-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-jump-thread-duplication-stmts=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-last-value-rtl-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-last-value-rtl-0.c
new file mode 100644
index 0000000..9b4e784
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-last-value-rtl-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-last-value-rtl=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-loop-header-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-loop-header-insns-0.c
new file mode 100644
index 0000000..453c4cf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-loop-header-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-loop-header-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-modulo-backtrack-attempts-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-modulo-backtrack-attempts-0.c
new file mode 100644
index 0000000..5f3e5e5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-modulo-backtrack-attempts-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-modulo-backtrack-attempts=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-once-peeled-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-once-peeled-insns-0.c
new file mode 100644
index 0000000..3d3b2c4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-once-peeled-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-once-peeled-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-partial-antic-length-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-partial-antic-length-0.c
new file mode 100644
index 0000000..a408d2e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-partial-antic-length-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-partial-antic-length=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-peel-branches-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-peel-branches-0.c
new file mode 100644
index 0000000..7a38eca
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-peel-branches-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-peel-branches=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-peel-times-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-peel-times-0.c
new file mode 100644
index 0000000..da80b29
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-peel-times-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-peel-times=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-peeled-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-peeled-insns-0.c
new file mode 100644
index 0000000..bda968e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-peeled-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-peeled-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-pending-list-length-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-pending-list-length-0.c
new file mode 100644
index 0000000..cf73b1a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-pending-list-length-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-pending-list-length=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-pipeline-region-blocks-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-pipeline-region-blocks-0.c
new file mode 100644
index 0000000..1d8e676
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-pipeline-region-blocks-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-pipeline-region-blocks=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-pipeline-region-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-pipeline-region-insns-0.c
new file mode 100644
index 0000000..62f99d9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-pipeline-region-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-pipeline-region-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-pow-sqrt-depth-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-pow-sqrt-depth-1.c
new file mode 100644
index 0000000..1ee4051
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-pow-sqrt-depth-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-pow-sqrt-depth=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-pow-sqrt-depth-32.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-pow-sqrt-depth-32.c
new file mode 100644
index 0000000..0613abc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-pow-sqrt-depth-32.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-pow-sqrt-depth=32" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-predicted-iterations-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-predicted-iterations-0.c
new file mode 100644
index 0000000..55f52b8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-predicted-iterations-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-predicted-iterations=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-reload-search-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-reload-search-insns-0.c
new file mode 100644
index 0000000..f1fb976
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-reload-search-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-reload-search-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-rtl-if-conversion-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-rtl-if-conversion-insns-0.c
new file mode 100644
index 0000000..2e246a9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-rtl-if-conversion-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-rtl-if-conversion-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-rtl-if-conversion-insns-99.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-rtl-if-conversion-insns-99.c
new file mode 100644
index 0000000..251902d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-rtl-if-conversion-insns-99.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-rtl-if-conversion-insns=99" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-extend-regions-iters-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-extend-regions-iters-0.c
new file mode 100644
index 0000000..3da8a77
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-extend-regions-iters-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-sched-extend-regions-iters=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-insn-conflict-delay-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-insn-conflict-delay-1.c
new file mode 100644
index 0000000..f1d508c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-insn-conflict-delay-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-sched-insn-conflict-delay=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-insn-conflict-delay-10.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-insn-conflict-delay-10.c
new file mode 100644
index 0000000..e01072a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-insn-conflict-delay-10.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-sched-insn-conflict-delay=10" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-ready-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-ready-insns-0.c
new file mode 100644
index 0000000..80bfbc5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-ready-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-sched-ready-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-region-blocks-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-region-blocks-0.c
new file mode 100644
index 0000000..e0547df
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-region-blocks-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-sched-region-blocks=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-region-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-region-insns-0.c
new file mode 100644
index 0000000..e19ecb3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-sched-region-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-sched-region-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-slsr-cand-scan-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-slsr-cand-scan-1.c
new file mode 100644
index 0000000..3997568
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-slsr-cand-scan-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-slsr-cand-scan=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-slsr-cand-scan-999999.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-slsr-cand-scan-999999.c
new file mode 100644
index 0000000..6dbbd07
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-slsr-cand-scan-999999.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-slsr-cand-scan=999999" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-speculative-devirt-maydefs-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-speculative-devirt-maydefs-0.c
new file mode 100644
index 0000000..e3b9e61
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-speculative-devirt-maydefs-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-speculative-devirt-maydefs=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-ssa-name-query-depth-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-ssa-name-query-depth-1.c
new file mode 100644
index 0000000..9757bff
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-ssa-name-query-depth-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-ssa-name-query-depth=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-stores-to-sink-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-stores-to-sink-0.c
new file mode 100644
index 0000000..c40395b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-stores-to-sink-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-stores-to-sink=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-tail-merge-comparisons-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-tail-merge-comparisons-0.c
new file mode 100644
index 0000000..dc5a434
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-tail-merge-comparisons-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-tail-merge-comparisons=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-tail-merge-iterations-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-tail-merge-iterations-0.c
new file mode 100644
index 0000000..5b37712
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-tail-merge-iterations-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-tail-merge-iterations=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-tracked-strlens-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-tracked-strlens-0.c
new file mode 100644
index 0000000..605ee4d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-tracked-strlens-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-tracked-strlens=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-tree-if-conversion-phi-args-2.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-tree-if-conversion-phi-args-2.c
new file mode 100644
index 0000000..7a03d84
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-tree-if-conversion-phi-args-2.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-tree-if-conversion-phi-args=2" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-unroll-times-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-unroll-times-0.c
new file mode 100644
index 0000000..8852a3f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-unroll-times-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-unroll-times=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-unrolled-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-unrolled-insns-0.c
new file mode 100644
index 0000000..3cbf802
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-unrolled-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-unrolled-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-unswitch-insns-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-unswitch-insns-0.c
new file mode 100644
index 0000000..0553526
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-unswitch-insns-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-unswitch-insns=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-unswitch-level-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-unswitch-level-0.c
new file mode 100644
index 0000000..c994a91
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-unswitch-level-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-unswitch-level=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-variable-expansions-in-unroller-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-variable-expansions-in-unroller-0.c
new file mode 100644
index 0000000..d758e6a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-variable-expansions-in-unroller-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-variable-expansions-in-unroller=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-expr-depth-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-expr-depth-0.c
new file mode 100644
index 0000000..e0600e8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-expr-depth-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-vartrack-expr-depth=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-reverse-op-size-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-reverse-op-size-0.c
new file mode 100644
index 0000000..e4a0a12
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-reverse-op-size-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-vartrack-reverse-op-size=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-size-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-size-0.c
new file mode 100644
index 0000000..7c0c5f2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-max-vartrack-size-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=max-vartrack-size=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-min-crossjump-insns-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-min-crossjump-insns-1.c
new file mode 100644
index 0000000..fe696fe
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-min-crossjump-insns-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=min-crossjump-insns=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-min-inline-recursive-probability-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-min-inline-recursive-probability-0.c
new file mode 100644
index 0000000..6ac66c4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-min-inline-recursive-probability-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=min-inline-recursive-probability=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-min-insn-to-prefetch-ratio-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-min-insn-to-prefetch-ratio-0.c
new file mode 100644
index 0000000..9990c14
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-min-insn-to-prefetch-ratio-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=min-insn-to-prefetch-ratio=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-min-nondebug-insn-uid-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-min-nondebug-insn-uid-1.c
new file mode 100644
index 0000000..47df8d5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-min-nondebug-insn-uid-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=min-nondebug-insn-uid=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-min-size-for-stack-sharing-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-min-size-for-stack-sharing-0.c
new file mode 100644
index 0000000..958a857
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-min-size-for-stack-sharing-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=min-size-for-stack-sharing=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-min-spec-prob-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-min-spec-prob-0.c
new file mode 100644
index 0000000..41a92fa
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-min-spec-prob-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=min-spec-prob=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-min-vect-loop-bound-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-min-vect-loop-bound-1.c
new file mode 100644
index 0000000..609e63c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-min-vect-loop-bound-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=min-vect-loop-bound=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-parloops-chunk-size-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-chunk-size-0.c
new file mode 100644
index 0000000..6d248db
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-chunk-size-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=parloops-chunk-size=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-auto.c b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-auto.c
new file mode 100644
index 0000000..d881035
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-auto.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=parloops-schedule=auto" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-dynamic.c b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-dynamic.c
new file mode 100644
index 0000000..33a7d45
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-dynamic.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=parloops-schedule=dynamic" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-guided.c b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-guided.c
new file mode 100644
index 0000000..724e0d8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-guided.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=parloops-schedule=guided" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-runtime.c b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-runtime.c
new file mode 100644
index 0000000..fca8139
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-runtime.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=parloops-schedule=runtime" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-static.c b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-static.c
new file mode 100644
index 0000000..12085b4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-parloops-schedule-static.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=parloops-schedule=static" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-partial-inlining-entry-probability-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-partial-inlining-entry-probability-0.c
new file mode 100644
index 0000000..2f8770d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-partial-inlining-entry-probability-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=partial-inlining-entry-probability=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-predictable-branch-outcome-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-predictable-branch-outcome-0.c
new file mode 100644
index 0000000..04ff951
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-predictable-branch-outcome-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=predictable-branch-outcome=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-predictable-branch-outcome-50.c b/gcc/testsuite/gcc.dg/params/param-boundary-predictable-branch-outcome-50.c
new file mode 100644
index 0000000..a916577
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-predictable-branch-outcome-50.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=predictable-branch-outcome=50" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-prefetch-latency-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-prefetch-latency-0.c
new file mode 100644
index 0000000..2e71980
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-prefetch-latency-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=prefetch-latency=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-prefetch-min-insn-to-mem-ratio-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-prefetch-min-insn-to-mem-ratio-0.c
new file mode 100644
index 0000000..a32e98e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-prefetch-min-insn-to-mem-ratio-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=prefetch-min-insn-to-mem-ratio=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-profile-func-internal-id-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-profile-func-internal-id-0.c
new file mode 100644
index 0000000..e858a38
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-profile-func-internal-id-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=profile-func-internal-id=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-profile-func-internal-id-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-profile-func-internal-id-1.c
new file mode 100644
index 0000000..7931e98
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-profile-func-internal-id-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=profile-func-internal-id=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sccvn-max-alias-queries-per-access-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-sccvn-max-alias-queries-per-access-0.c
new file mode 100644
index 0000000..d28f6cb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sccvn-max-alias-queries-per-access-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sccvn-max-alias-queries-per-access=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sccvn-max-scc-size-10.c b/gcc/testsuite/gcc.dg/params/param-boundary-sccvn-max-scc-size-10.c
new file mode 100644
index 0000000..a99bf1f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sccvn-max-scc-size-10.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sccvn-max-scc-size=10" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-scev-max-expr-complexity-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-scev-max-expr-complexity-0.c
new file mode 100644
index 0000000..f482565
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-scev-max-expr-complexity-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=scev-max-expr-complexity=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-scev-max-expr-size-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-scev-max-expr-size-0.c
new file mode 100644
index 0000000..829f3ef
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-scev-max-expr-size-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=scev-max-expr-size=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sched-autopref-queue-depth-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-sched-autopref-queue-depth-0.c
new file mode 100644
index 0000000..f238c4e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sched-autopref-queue-depth-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sched-autopref-queue-depth=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sched-mem-true-dep-cost-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-sched-mem-true-dep-cost-0.c
new file mode 100644
index 0000000..26529a2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sched-mem-true-dep-cost-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sched-mem-true-dep-cost=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sched-pressure-algorithm-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-sched-pressure-algorithm-1.c
new file mode 100644
index 0000000..baef335
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sched-pressure-algorithm-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sched-pressure-algorithm=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sched-pressure-algorithm-2.c b/gcc/testsuite/gcc.dg/params/param-boundary-sched-pressure-algorithm-2.c
new file mode 100644
index 0000000..8208c7b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sched-pressure-algorithm-2.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sched-pressure-algorithm=2" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sched-spec-prob-cutoff-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-sched-spec-prob-cutoff-0.c
new file mode 100644
index 0000000..e396c3d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sched-spec-prob-cutoff-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sched-spec-prob-cutoff=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sched-spec-prob-cutoff-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-sched-spec-prob-cutoff-100.c
new file mode 100644
index 0000000..6239e3e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sched-spec-prob-cutoff-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sched-spec-prob-cutoff=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sched-state-edge-prob-cutoff-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-sched-state-edge-prob-cutoff-0.c
new file mode 100644
index 0000000..bee94bb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sched-state-edge-prob-cutoff-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sched-state-edge-prob-cutoff=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sched-state-edge-prob-cutoff-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-sched-state-edge-prob-cutoff-100.c
new file mode 100644
index 0000000..970b299
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sched-state-edge-prob-cutoff-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sched-state-edge-prob-cutoff=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-selsched-insns-to-rename-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-selsched-insns-to-rename-0.c
new file mode 100644
index 0000000..02f385c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-selsched-insns-to-rename-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=selsched-insns-to-rename=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-selsched-max-lookahead-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-selsched-max-lookahead-0.c
new file mode 100644
index 0000000..cb97ab6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-selsched-max-lookahead-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=selsched-max-lookahead=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-selsched-max-sched-times-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-selsched-max-sched-times-0.c
new file mode 100644
index 0000000..2008bc9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-selsched-max-sched-times-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=selsched-max-sched-times=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-simultaneous-prefetches-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-simultaneous-prefetches-0.c
new file mode 100644
index 0000000..1be9f96
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-simultaneous-prefetches-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=simultaneous-prefetches=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sink-frequency-threshold-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-sink-frequency-threshold-0.c
new file mode 100644
index 0000000..52ae9a4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sink-frequency-threshold-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sink-frequency-threshold=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sink-frequency-threshold-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-sink-frequency-threshold-100.c
new file mode 100644
index 0000000..739045b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sink-frequency-threshold-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sink-frequency-threshold=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-slp-max-insns-in-bb-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-slp-max-insns-in-bb-0.c
new file mode 100644
index 0000000..90d7746
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-slp-max-insns-in-bb-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=slp-max-insns-in-bb=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sms-dfa-history-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-sms-dfa-history-0.c
new file mode 100644
index 0000000..8494bb6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sms-dfa-history-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sms-dfa-history=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sms-loop-average-count-threshold-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-sms-loop-average-count-threshold-0.c
new file mode 100644
index 0000000..c60b422
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sms-loop-average-count-threshold-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sms-loop-average-count-threshold=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sms-max-ii-factor-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-sms-max-ii-factor-0.c
new file mode 100644
index 0000000..fa66545
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sms-max-ii-factor-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sms-max-ii-factor=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sms-min-sc-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-sms-min-sc-1.c
new file mode 100644
index 0000000..66ea759
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sms-min-sc-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sms-min-sc=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sra-max-scalarization-size-Osize-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-sra-max-scalarization-size-Osize-0.c
new file mode 100644
index 0000000..f87495a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sra-max-scalarization-size-Osize-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sra-max-scalarization-size-Osize=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-sra-max-scalarization-size-Ospeed-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-sra-max-scalarization-size-Ospeed-0.c
new file mode 100644
index 0000000..13c6059
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-sra-max-scalarization-size-Ospeed-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=sra-max-scalarization-size-Ospeed=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-ssp-buffer-size-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-ssp-buffer-size-1.c
new file mode 100644
index 0000000..e9e76cb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-ssp-buffer-size-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=ssp-buffer-size=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-switch-conversion-max-branch-ratio-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-switch-conversion-max-branch-ratio-1.c
new file mode 100644
index 0000000..4ef640c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-switch-conversion-max-branch-ratio-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=switch-conversion-max-branch-ratio=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tm-max-aggregate-size-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-tm-max-aggregate-size-0.c
new file mode 100644
index 0000000..e09c2cf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tm-max-aggregate-size-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tm-max-aggregate-size=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-0.c
new file mode 100644
index 0000000..116faa9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tracer-dynamic-coverage=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-100.c
new file mode 100644
index 0000000..0541435
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tracer-dynamic-coverage=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-feedback-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-feedback-0.c
new file mode 100644
index 0000000..ef6b11c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-feedback-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tracer-dynamic-coverage-feedback=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-feedback-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-feedback-100.c
new file mode 100644
index 0000000..79bb1ca
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-dynamic-coverage-feedback-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tracer-dynamic-coverage-feedback=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tracer-max-code-growth-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-max-code-growth-0.c
new file mode 100644
index 0000000..5295ad2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-max-code-growth-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tracer-max-code-growth=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-0.c
new file mode 100644
index 0000000..b648578
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tracer-min-branch-probability=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-100.c
new file mode 100644
index 0000000..44d5d8c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tracer-min-branch-probability=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-feedback-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-feedback-0.c
new file mode 100644
index 0000000..ccd3879
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-feedback-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tracer-min-branch-probability-feedback=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-feedback-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-feedback-100.c
new file mode 100644
index 0000000..0c41822
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-probability-feedback-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tracer-min-branch-probability-feedback=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-ratio-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-ratio-0.c
new file mode 100644
index 0000000..e754508
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-ratio-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tracer-min-branch-ratio=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-ratio-100.c b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-ratio-100.c
new file mode 100644
index 0000000..8a60607
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tracer-min-branch-ratio-100.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tracer-min-branch-ratio=100" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-tree-reassoc-width-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-tree-reassoc-width-0.c
new file mode 100644
index 0000000..d3a5086
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-tree-reassoc-width-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=tree-reassoc-width=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-uninit-control-dep-attempts-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-uninit-control-dep-attempts-1.c
new file mode 100644
index 0000000..e6039c9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-uninit-control-dep-attempts-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=uninit-control-dep-attempts=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-unlikely-bb-count-fraction-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-unlikely-bb-count-fraction-1.c
new file mode 100644
index 0000000..f1bbb59
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-unlikely-bb-count-fraction-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=unlikely-bb-count-fraction=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-unlikely-bb-count-fraction-10000.c b/gcc/testsuite/gcc.dg/params/param-boundary-unlikely-bb-count-fraction-10000.c
new file mode 100644
index 0000000..ec693fa
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-unlikely-bb-count-fraction-10000.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=unlikely-bb-count-fraction=10000" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-use-canonical-types-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-use-canonical-types-0.c
new file mode 100644
index 0000000..13e9c9f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-use-canonical-types-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=use-canonical-types=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-use-canonical-types-1.c b/gcc/testsuite/gcc.dg/params/param-boundary-use-canonical-types-1.c
new file mode 100644
index 0000000..7ef4463
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-use-canonical-types-1.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=use-canonical-types=1" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-vect-max-peeling-for-alignment-64.c b/gcc/testsuite/gcc.dg/params/param-boundary-vect-max-peeling-for-alignment-64.c
new file mode 100644
index 0000000..6350d39
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-vect-max-peeling-for-alignment-64.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=vect-max-peeling-for-alignment=64" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-vect-max-version-for-alias-checks-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-vect-max-version-for-alias-checks-0.c
new file mode 100644
index 0000000..4e28bd0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-vect-max-version-for-alias-checks-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=vect-max-version-for-alias-checks=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/param-boundary-vect-max-version-for-alignment-checks-0.c b/gcc/testsuite/gcc.dg/params/param-boundary-vect-max-version-for-alignment-checks-0.c
new file mode 100644
index 0000000..e964b04
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/param-boundary-vect-max-version-for-alignment-checks-0.c
@@ -0,0 +1,4 @@
+// { dg-do compile }
+// { dg-options "-O3 --param=vect-max-version-for-alignment-checks=0" }
+
+#include "nanojpeg.h"
diff --git a/gcc/testsuite/gcc.dg/params/params.exp b/gcc/testsuite/gcc.dg/params/params.exp
new file mode 100644
index 0000000..73a7f9f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/params/params.exp
@@ -0,0 +1,31 @@
+# Copyright (C) 2016 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c]] "" ""
+
+# All done.
+dg-finish
-- 
2.8.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]