From patchwork Mon Nov 4 14:23:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Martin_Li=C5=A1ka?= X-Patchwork-Id: 1188974 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-512316-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="D5KWb7Ws"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 476FQt5W1Rz9sNx for ; Tue, 5 Nov 2019 01:23:49 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :subject:to:cc:message-id:date:mime-version:content-type; q=dns; s=default; b=wYasekBr4FVlmtEzyHsCCVzSQjTNpv/x2UqO61OMEhFHQvu/wu Zs9bxzajDcMWDur9dyD22RBXTINiDxzKSgPX/WiM8CBHiC0pODxcOVfnOaJfP7to XX/ARvIv9lA5St3DHHccY5LdOsIlNnxdldgFRMkn7xdUoQ+hz3axRaoJg= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :subject:to:cc:message-id:date:mime-version:content-type; s= default; bh=YNMwbvcU1Ui/ZbhaxEdpiOvZNhg=; b=D5KWb7Ws1YVVum2vPATJ GAnls3Pa4doM61XBTRAa7hY8PBIdYRv8h60VWYNOZziNxyIeLwiAdXTe9dJgokzY N7ngVYN+oaTs9f2DlnY+GS4Oip2u3Vrc9LYDdF90+aq0ELELB42tZHa8Vlogld9X KxVwuU0CBiQxn888+mLxFnQ= Received: (qmail 94587 invoked by alias); 4 Nov 2019 14:23:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 94566 invoked by uid 89); 4 Nov 2019 14:23:36 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, SPF_PASS autolearn=ham version=3.3.1 spammy=Master, uninit X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 04 Nov 2019 14:23:23 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 6850FB422; Mon, 4 Nov 2019 14:23:20 +0000 (UTC) From: =?utf-8?q?Martin_Li=C5=A1ka?= Subject: [PATCH] Add if-chain to switch conversion pass. To: gcc-patches@gcc.gnu.org Cc: kazu@gcc.gnu.org, Jan Hubicka Message-ID: <2c3db526-cac6-4eeb-4afb-12024f8d5af2@suse.cz> Date: Mon, 4 Nov 2019 15:23:20 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.0 MIME-Version: 1.0 X-IsSubscribed: yes Hello. The patch adds a new pass that identifies a series of if-elseif statements and transform then into a GIMPLE switch (if possible). The pass runs right after tree-ssa pass and I decided to implement matching of various forms that are introduced by folder (fold_range_test): 1) if condition with equal operation: : if (argc_8(D) == 1) goto ; [INV] else goto ; [INV] 2) if condition with a range check: : _4 = c_13(D) + 198; if (_4 <= 1) goto ; [INV] else goto ; [INV] 3) mixture of 1) and 2) with a or condition: : _1 = aChar_8(D) == 1; _2 = aChar_8(D) == 10; _3 = _1 | _2; if (_3 != 0) goto ; [INV] else goto ; [INV] or: : aChar.1_1 = (unsigned int) aChar_10(D); _2 = aChar.1_1 + 4294967287; _3 = _2 <= 1; _4 = aChar_10(D) == 12; _5 = _3 | _4; if (_5 != 0) goto ; [INV] else goto ; [INV] The motivation example in PR88702 is transformed now into: IsHTMLWhitespace (int aChar) { int iftmp.0_1; [local count: 1073741824]: switch (aChar_2(D)) [50.00%], case 9 ... 10: [50.00%], case 12 ... 13: [50.00%], case 32: [50.00%]> [local count: 536870913]: : [local count: 1073741824]: # iftmp.0_1 = PHI <1(2), 0(3)> : return iftmp.0_1; } I'm also attaching if-elseif chains that are transformed in make all-host of the GCC compiler. There are ~800 such transformations. The most beautiful transformation is this one: $ cat -n gcc/c-family/c-common.c ... 2895 /* This used to be a switch, but Genix compiler can't handle that. */ 2896 if (code == NE_EXPR) 2897 { 2898 if (max_lt || min_gt) 2899 val = truthvalue_true_node; 2900 } 2901 else if (code == EQ_EXPR) 2902 { 2903 if (max_lt || min_gt) 2904 val = truthvalue_false_node; 2905 } ... Patch can bootstrap on x86_64-linux-gnu and survives regression tests. Thoughts? Thanks, Martin gcc/ChangeLog: 2019-11-04 Martin Liska PR tree-optimization/14799 PR ipa/88702 * Makefile.in: Include new tree-if-to-switch.o. * common.opt: Document -ftree-if-to-switch. * doc/invoke.texi: Likewise. * opts.c: Enable the pass with -O2+. * passes.def: Add ne pass. * timevar.def (TV_TREE_IF_TO_SWITCH): Add new timevar. * tree-if-to-switch.c: New file. * tree-pass.h (make_pass_if_to_switch): New. gcc/testsuite/ChangeLog: 2019-11-04 Martin Liska PR tree-optimization/14799 PR ipa/88702 * gcc.dg/tree-ssa/if-to-switch-1.c: New test. * gcc.dg/tree-ssa/if-to-switch-2.c: New test. * gcc.dg/tree-ssa/if-to-switch-3.c: New test. * gcc.dg/tree-ssa/if-to-switch-4.c: New test. * gcc.dg/tree-ssa/if-to-switch-5.c: New test. * gcc.dg/tree-ssa/reassoc-32.c: Disable tree-if-to-switch in order to transform the range test. * gcc.dg/tree-ssa/reassoc-33.c: Likewise. --- gcc/Makefile.in | 1 + gcc/common.opt | 4 + gcc/doc/invoke.texi | 10 +- gcc/opts.c | 1 + gcc/passes.def | 1 + .../gcc.dg/tree-ssa/if-to-switch-1.c | 35 + .../gcc.dg/tree-ssa/if-to-switch-2.c | 11 + .../gcc.dg/tree-ssa/if-to-switch-3.c | 11 + .../gcc.dg/tree-ssa/if-to-switch-4.c | 35 + .../gcc.dg/tree-ssa/if-to-switch-5.c | 12 + gcc/testsuite/gcc.dg/tree-ssa/reassoc-32.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/reassoc-33.c | 2 +- gcc/timevar.def | 1 + gcc/tree-if-to-switch.c | 611 ++++++++++++++++++ gcc/tree-pass.h | 1 + 15 files changed, 735 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-1.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-2.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-3.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-4.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-5.c create mode 100644 gcc/tree-if-to-switch.c Condition chain (at ../../gcc/asan.h:166) with 12 conditions (9 BBs) transformed into a switch statement. Condition chain (at ../../gcc/asan.h:166) with 12 conditions (9 BBs) transformed into a switch statement. Condition chain (at ../../gcc/calls.c:1530) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-decl.c:6085) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-decl.c:6436) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-parser.c:11688) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-parser.c:344) with 8 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-typeck.c:11725) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-typeck.c:11728) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-typeck.c:11794) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-typeck.c:11853) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-typeck.c:4627) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-typeck.c:6813) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-typeck.c:6817) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c/c-typeck.c:7951) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-common.c:2235) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-common.c:2376) with 18 conditions (18 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-common.c:2896) with 6 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-common.c:3637) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-common.c:6104) with 10 conditions (10 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-common.c:6652) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-omp.c:1563) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-omp.c:1757) with 6 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-pragma.c:142) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-pretty-print.c:1759) with 5 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-pretty-print.c:1952) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-pretty-print.c:401) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-warn.c:1917) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-warn.c:1941) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/c-family/c-warn.c:510) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cgraph.h:2617) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cgraph.h:2617) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cgraph.h:2617) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cgraph.h:2617) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cgraph.h:2617) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cgraph.h:2617) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cgraph.h:2617) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cgraph.h:2617) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/combine.c:10660) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/combine.c:11866) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/combine.c:11882) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/combine.c:11886) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/combine.c:6780) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/combine.c:8726) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/combine.c:9391) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/constraints.md:233) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/constraints.md:234) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/constraints.md:234) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:12074) with 8 conditions (8 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:12095) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:12838) with 7 conditions (7 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:12965) with 6 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:1857) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:18715) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:18743) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:18750) with 8 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:18799) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:19368) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:19384) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:3325) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.c:3850) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386-expand.c:10779) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386-expand.c:11421) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386-expand.c:14125) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386-expand.c:1868) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386-expand.c:2713) with 7 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386-expand.c:3134) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386-expand.c:6855) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:1119) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:13676) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:13707) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:13747) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14258) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14260) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14270) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14272) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14757) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14761) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14765) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14781) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14785) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14789) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14909) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14913) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14917) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14933) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14937) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:14941) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15068) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15068) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15108) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15108) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15112) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15112) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15172) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15172) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15260) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15296) with 6 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15304) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15304) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15308) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15308) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15344) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15344) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15348) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15348) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15352) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15352) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15356) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15356) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15380) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15380) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15384) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15384) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15388) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15388) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15392) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15392) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15435) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15435) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15448) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15448) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15548) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15548) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15555) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15555) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15576) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15588) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15588) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15595) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15595) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15608) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15608) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15612) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15612) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15615) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15615) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15616) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15616) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15619) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15619) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15623) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15623) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15636) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15636) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15640) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15640) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15643) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15643) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15647) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15647) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15648) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15648) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15655) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15655) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15700) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15756) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15772) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15776) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15787) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15787) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15791) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15791) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15795) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15795) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15796) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15796) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15796) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15799) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15799) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15800) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15800) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15800) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15804) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15804) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15808) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15808) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15820) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15824) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15849) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15849) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15852) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15856) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15889) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15889) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15893) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15893) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15969) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15969) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15995) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:15995) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16035) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16035) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16039) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16039) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16115) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16115) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16135) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16135) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16173) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16173) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16177) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16177) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16181) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16181) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16185) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16185) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16188) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16188) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16240) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16255) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16255) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16288) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16288) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16289) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16295) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16295) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16300) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16315) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16315) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16319) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16319) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16319) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16319) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16323) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16323) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16323) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16323) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16327) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16327) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16328) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16328) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16328) with 6 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16331) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16331) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16343) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16343) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16347) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16347) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16347) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16347) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16348) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16348) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16352) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16352) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16353) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16355) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16355) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16356) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16356) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16376) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16376) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16380) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16380) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16387) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16387) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16387) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16388) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16388) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16391) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16391) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16408) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16408) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16412) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16413) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16433) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16451) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16451) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16451) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16452) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16469) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16477) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16485) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16487) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16487) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16489) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16491) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16491) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16491) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16495) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16495) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16499) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16499) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16509) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16513) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16533) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16536) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16536) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16537) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16540) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16540) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16544) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16544) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16548) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16548) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16565) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16569) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16583) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16583) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16587) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16587) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16623) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16623) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16627) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16627) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16631) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16631) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16635) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16635) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16640) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16644) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16659) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16659) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16663) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16663) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16667) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16667) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16671) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16671) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16770) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16776) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16780) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16800) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16830) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16892) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16938) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:16942) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17170) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17174) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17306) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17310) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17330) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17357) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17374) with 6 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17418) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17422) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17437) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17454) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17481) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17482) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17498) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:17522) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:1897) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19703) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19727) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19815) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19839) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19867) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19883) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19887) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19891) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19907) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19911) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19915) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19919) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19939) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19939) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19943) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19943) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19963) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19963) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19967) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19967) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19987) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19991) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19995) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:19999) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:20019) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:20023) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2247) with 8 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2251) with 6 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2265) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22662) with 11 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22666) with 11 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22670) with 9 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22674) with 9 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22678) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22738) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22794) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22801) with 11 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22805) with 11 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22809) with 9 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22813) with 9 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22817) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22826) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22877) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2291) with 6 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22933) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:22965) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2302) with 8 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2303) with 7 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2306) with 6 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2346) with 6 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2358) with 7 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:24826) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:24890) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:24946) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:24998) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25010) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25010) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25014) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25022) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25026) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25054) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25058) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25062) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25074) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25078) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25078) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25082) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25086) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25090) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25102) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25106) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25118) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25122) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25134) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25138) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25142) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25146) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25166) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25170) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25198) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:25202) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28547) with 11 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28551) with 11 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28555) with 9 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28559) with 9 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28563) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28618) with 11 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28622) with 11 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28623) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28626) with 9 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28630) with 9 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28634) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28679) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28694) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28750) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28803) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28819) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2884) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28859) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28863) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28874) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2888) with 9 conditions (7 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28890) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28930) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:28934) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2933) with 6 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2977) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:2997) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3142) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3161) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3170) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3174) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3189) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3193) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3238) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3257) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3454) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3458) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3462) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3466) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3473) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3477) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3481) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:3485) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:471) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:493) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:493) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:499) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:499) with 5 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:499) with 5 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:499) with 5 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:542) with 13 conditions (7 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:547) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:561) with 29 conditions (29 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:561) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:561) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:675) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:675) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:827) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:831) with 7 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:853) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:885) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:885) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:910) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:910) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:912) with 6 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/i386.md:912) with 6 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/predicates.md:795) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/predicates.md:811) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/predicates.md:819) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/predicates.md:827) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/sse.md:17117) with 13 conditions (7 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/sync.md:2662) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/sync.md:2689) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/sync.md:2785) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/sync.md:2810) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/x86-tune-sched-bd.c:167) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/x86-tune-sched-bd.c:460) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/config/i386/x86-tune-sched-bd.c:593) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/cvt.c:861) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/cxx-pretty-print.c:641) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/decl2.c:1204) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/decl.c:10845) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/decl.c:11691) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/decl.c:14212) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/decl.c:5668) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/decl.c:8970) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/mangle.c:2848) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/mangle.c:3121) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/method.c:1339) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/method.c:1452) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/method.c:1486) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/method.c:1587) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/parser.c:31586) with 12 conditions (7 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/parser.c:42835) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/pt.c:14927) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/semantics.c:4323) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/typeck.c:4471) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/typeck.c:6430) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cp/type-utils.h:44) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cse.c:3634) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/cselib.c:1634) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/diagnostic-show-locus.c:1312) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/diagnostic-show-locus.c:700) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/dwarf2out.c:5410) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/dwarf2out.c:7125) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/expr.c:8509) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/expr.c:9890) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/final.c:3922) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fold-const.c:1682) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fold-const.c:1849) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fold-const.c:1914) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fold-const.c:8141) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fold-const.c:8220) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fold-const.c:8608) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fold-const.c:9761) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/arith.c:1565) with 11 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/check.c:184) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/check.c:324) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/check.c:413) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/convert.c:103) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/convert.c:112) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/decl.c:4724) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/decl.c:5378) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/dependency.c:1686) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/dependency.c:1738) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/dependency.c:1761) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/dump-parse-tree.c:1205) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/frontend-passes.c:406) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/interface.c:1025) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/interface.c:1058) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/interface.c:1058) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/interface.c:2100) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/intrinsic.c:953) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/io.c:455) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/io.c:476) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/io.c:664) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/match.c:2184) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/match.c:2998) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/openmp.c:588) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/parse.c:1369) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/parse.c:4193) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/parse.c:4357) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/primary.c:1155) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/resolve.c:4155) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/resolve.c:7750) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/scanner.c:1038) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/scanner.c:1101) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/scanner.c:1537) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/scanner.c:1785) with 5 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/scanner.c:1823) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/scanner.c:1896) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/scanner.c:2360) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/scanner.c:844) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/scanner.c:950) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/scanner.c:979) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/symbol.c:1765) with 7 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/trans-array.c:5003) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/trans-intrinsic.c:4532) with 5 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/fortran/trans-types.c:821) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/function.c:382) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gcc.c:5592) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gcc.c:5613) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/genautomata.c:951) with 8 conditions (8 BBs) transformed into a switch statement. Condition chain (at ../../gcc/genflags.c:61) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gengtype.c:288) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gengtype.c:288) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gengtype.h:344) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gengtype.h:344) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gengtype.h:344) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gengtype.h:344) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gengtype-state.c:378) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gengtype-state.c:378) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gengtype-state.c:422) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gengtype-state.c:422) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/genoutput.c:763) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gensupport.c:829) with 7 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gensupport.c:932) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.c:1796) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:2822) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple.h:6546) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple-loop-versioning.cc:1235) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple-pretty-print.c:391) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple-ssa-isolate-paths.c:238) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple-ssa-isolate-paths.c:480) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple-ssa-isolate-paths.c:511) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple-ssa-split-paths.c:135) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple-ssa-strength-reduction.c:2138) with 7 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimple-streamer-in.c:216) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimplify.c:14262) with 17 conditions (9 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimplify.c:14262) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimplify.c:14262) with 6 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/gimplify.c:868) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/hsa-gen.c:3106) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/ifcvt.c:1701) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/ipa-fnsummary.c:1087) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/ipa-icf-gimple.c:150) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/ipa-prop.c:316) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/ira-build.c:1840) with 8 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/ira.c:1938) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/ira-costs.c:1154) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/jump.c:709) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/jump.c:720) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/jump.c:730) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/jump.c:756) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/jump.c:899) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/jump.c:901) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/lra-constraints.c:4213) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/lra-eliminations.c:759) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/lto-cgraph.c:1505) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/lto-cgraph.c:1758) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/lto/lto-common.c:1173) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/lto/lto-common.c:1404) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/lto/lto-lang.c:1109) with 18 conditions (18 BBs) transformed into a switch statement. Condition chain (at ../../gcc/lto/lto-lang.c:978) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/lto-streamer-in.c:1459) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/lto-streamer-in.c:1495) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/lto-streamer-out.c:1075) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/mcf.c:151) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/multiple_target.c:275) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/omp-expand.c:8872) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/omp-low.c:4495) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/omp-low.c:8292) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/omp-low.c:8521) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/optabs.c:1098) with 7 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/optabs.c:1277) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/optabs.c:1339) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/optabs.c:1444) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/optabs.c:1890) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/optabs.c:2783) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/optabs.c:3098) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/optabs-query.h:89) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/optabs-query.h:89) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/opts.c:169) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/print-rtl.c:511) with 6 conditions (6 BBs) transformed into a switch statement. Condition chain (at ../../gcc/print-tree.c:491) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/read-md.c:272) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/read-md.c:272) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/read-md.c:467) with 6 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/read-md.c:467) with 6 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/read-md.c:472) with 7 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/read-md.c:472) with 7 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/read-md.c:605) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/read-md.c:605) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/read-md.c:638) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/read-md.c:638) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/read-rtl-function.c:1400) with 10 conditions (10 BBs) transformed into a switch statement. Condition chain (at ../../gcc/recog.c:1870) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/regcprop.c:554) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/regcprop.c:561) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/reginfo.c:368) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/regrename.c:1311) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/regrename.c:1318) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/reload1.c:1359) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/reload1.c:3020) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/reload1.c:5625) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/reload1.c:5647) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/reload.c:2864) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/reload.c:329) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/reload.c:4660) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/reload.c:5551) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/reload.c:5562) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/rtlanal.c:1726) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/rtlanal.c:3524) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/rtlanal.c:3540) with 5 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/rtlanal.c:6242) with 5 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/sched-deps.c:2962) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/sched-deps.c:4277) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/sel-sched.c:2457) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/simplify-rtx.c:5334) with 6 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/simplify-rtx.c:5412) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/simplify-rtx.c:5527) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/targhooks.c:417) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/toplev.c:2083) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/trans-mem.c:1420) with 6 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/trans-mem.c:376) with 10 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/trans-mem.c:422) with 10 conditions (5 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.c:10018) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.c:10032) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.c:4479) with 8 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.c:5078) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.c:7430) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.c:7432) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.c:9950) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.c:9981) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.c:9995) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-data-ref.c:714) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.h:5104) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.h:5104) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.h:5104) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.h:5104) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.h:5104) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.h:5104) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree.h:5104) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-inline.c:5406) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-inline.c:5422) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-ccp.c:1791) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-dom.c:1925) with 4 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-dse.c:998) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-forwprop.c:1211) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-forwprop.c:1933) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-forwprop.c:2376) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-forwprop.c:2748) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-forwprop.c:2750) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-loop-manip.c:1025) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-operands.c:870) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-reassoc.c:1984) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-reassoc.c:6303) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-structalias.c:4984) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-threadbackward.c:752) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-threadbackward.c:85) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-ssa-threadedge.c:446) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-vect-generic.c:1961) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-vect-patterns.c:4060) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-vect-stmts.c:10437) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-vect-stmts.c:11554) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-vect-stmts.c:5330) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-vect-stmts.c:5364) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-vect-stmts.c:5383) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-vect-stmts.c:5421) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/tree-vrp.c:2374) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/varasm.c:7093) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/varasm.c:7108) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/vr-values.c:1525) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/vr-values.c:1652) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/vr-values.c:1665) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at ../../gcc/vr-values.c:1672) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at ../../gcc/vr-values.c:2251) with 3 conditions (2 BBs) transformed into a switch statement. Condition chain (at ../../gcc/vr-values.c:572) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at generic-match.c:11350) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at generic-match.c:13676) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at generic-match.c:13743) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at generic-match.c:2238) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at generic-match.c:3464) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at generic-match.c:3533) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at generic-match.c:4637) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at generic-match.c:6091) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at gimple-match.c:12730) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at gimple-match.c:15379) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at gimple-match.c:15440) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at gimple-match.c:2515) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at gimple-match.c:3886) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at gimple-match.c:3947) with 4 conditions (4 BBs) transformed into a switch statement. Condition chain (at gimple-match.c:6163) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at gimple-match.c:8404) with 4 conditions (3 BBs) transformed into a switch statement. Condition chain (at insn-dfatab.c:2697) with 3 conditions (3 BBs) transformed into a switch statement. Condition chain (at insn-dfatab.c:2733) with 6 conditions (5 BBs) transformed into a switch statement. Condition chain (at ./tm-preds.h:304) with 3 conditions (3 BBs) transformed into a switch statement. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 035b58f50c0..0d92347ad9b 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1525,6 +1525,7 @@ OBJS = \ tree-eh.o \ tree-emutls.o \ tree-if-conv.o \ + tree-if-to-switch.o \ tree-inline.o \ tree-into-ssa.o \ tree-iterator.o \ diff --git a/gcc/common.opt b/gcc/common.opt index cc279f411d7..671b2a99391 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -2649,6 +2649,10 @@ ftree-switch-conversion Common Report Var(flag_tree_switch_conversion) Optimization Perform conversions of switch initializations. +ftree-if-to-switch +Common Report Var(flag_tree_if_to_switch) Optimization +Perform conversions of if-elseif chain into a switch statement. + ftree-dce Common Report Var(flag_tree_dce) Optimization Enable SSA dead code elimination optimization on trees. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index faa7fa95a0e..125b34e7f43 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -478,7 +478,7 @@ Objective-C and Objective-C++ Dialects}. -fthread-jumps -ftracer -ftree-bit-ccp @gol -ftree-builtin-call-dce -ftree-ccp -ftree-ch @gol -ftree-coalesce-vars -ftree-copy-prop -ftree-dce -ftree-dominator-opts @gol --ftree-dse -ftree-forwprop -ftree-fre -fcode-hoisting @gol +-ftree-dse -ftree-forwprop -ftree-fre -ftree-if-to-switch -fcode-hoisting @gol -ftree-loop-if-convert -ftree-loop-im @gol -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns @gol -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol @@ -8443,6 +8443,7 @@ also turns on the following optimization flags: -fstrict-aliasing @gol -fthread-jumps @gol -ftree-builtin-call-dce @gol +-ftree-if-to-switch @gol -ftree-pre @gol -ftree-switch-conversion -ftree-tail-merge @gol -ftree-vrp} @@ -9628,6 +9629,13 @@ Perform conversion of simple initializations in a switch to initializations from a scalar array. This flag is enabled by default at @option{-O2} and higher. +@item -ftree-if-to-switch +@opindex ftree-if-to-switch +Perform conversion of an if cascade into a switch statement. +The transformation can help to produce a faster code for +the switch statement. This flag is enabled by default +at @option{-O2} and higher. + @item -ftree-tail-merge @opindex ftree-tail-merge Look for identical code sequences. When found, replace one with a jump to the diff --git a/gcc/opts.c b/gcc/opts.c index 10b9f108f8d..f781cfd5709 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -524,6 +524,7 @@ static const struct default_options default_options_table[] = { OPT_LEVELS_2_PLUS, OPT_fthread_jumps, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_ftree_pre, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_ftree_switch_conversion, NULL, 1 }, + { OPT_LEVELS_2_PLUS, OPT_ftree_if_to_switch, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_ftree_tail_merge, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_ftree_vrp, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_fvect_cost_model_, NULL, VECT_COST_MODEL_CHEAP }, diff --git a/gcc/passes.def b/gcc/passes.def index 798a391bd35..2bd2c348fb3 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -59,6 +59,7 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_early_warn_uninitialized); NEXT_PASS (pass_ubsan); NEXT_PASS (pass_nothrow); + NEXT_PASS (pass_if_to_switch); NEXT_PASS (pass_rebuild_cgraph_edges); POP_INSERT_PASSES () diff --git a/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-1.c b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-1.c new file mode 100644 index 00000000000..bcb8ef2a160 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-1.c @@ -0,0 +1,35 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-iftoswitch" } */ + +int global; +int foo (); + +int main(int argc, char **argv) +{ + if (argc == 1) + foo (); + else if (argc == 2) + { + global += 1; + } + else if (argc == 3) + { + foo (); + foo (); + } + else if (argc == 4) + { + foo (); + } + else if (argc == 5) + { + global = 2; + } + else + global -= 123; + + global -= 12; + return 0; +} + +/* { dg-final { scan-tree-dump "Condition chain \\(at .*if-to-switch-1.c:9\\) with 5 conditions \\(5 BBs\\) transformed into a switch statement." "iftoswitch" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-2.c b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-2.c new file mode 100644 index 00000000000..316e772ec29 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-2.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-iftoswitch" } */ + +int IsHTMLWhitespaceNoRange(int aChar) +{ + return aChar == 0x0001 || aChar == 0x000A || + aChar == 0x000C || aChar == 0x000E || + aChar == 0x0020; +} + +/* { dg-final { scan-tree-dump "Condition chain \\(at .*if-to-switch-2.c:7\\) with 5 conditions \\(3 BBs\\) transformed into a switch statement." "iftoswitch" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-3.c b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-3.c new file mode 100644 index 00000000000..fd07d909a3c --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-3.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-iftoswitch" } */ + +int IsHTMLWhitespace(int aChar) +{ + return aChar == 0x0009 || aChar == 0x000A || + aChar == 0x000C || aChar == 0x000D || + aChar == 0x0020 || aChar == 0x0030; +} + +/* { dg-final { scan-tree-dump "Condition chain \\(at .*if-to-switch-3.c:8\\) with 5 conditions \\(3 BBs\\) transformed into a switch statement." "iftoswitch" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-4.c b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-4.c new file mode 100644 index 00000000000..4e047505a2b --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-4.c @@ -0,0 +1,35 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-iftoswitch" } */ + +int global; +int foo (); + +int main(int argc, char **argv) +{ + if (argc == 1) + foo (); + else if (argc == 2) + { + global += 1; + } + else if (argc == 3) + { + foo (); + foo (); + } + else if (argc == 4) + { + foo (); + } + else if (argc == 1) + { + global = 2; + } + else + global -= 123; + + global -= 12; + return 0; +} + +/* { dg-final { scan-tree-dump-not "Condition chain " "iftoswitch" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-5.c b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-5.c new file mode 100644 index 00000000000..acb8b4b1211 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-5.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-iftoswitch" } */ + +int crud (unsigned char c) +{ + return (((((((((((int) c == 46) || (int) c == 44) + || (int) c == 58) || (int) c == 59) || (int) c == 60) + || (int) c == 62) || (int) c == 34) || (int) c == 92) + || (int) c == 39) != 0); +} + +/* { dg-final { scan-tree-dump "Condition chain \\(at .*if-to-switch-5.c:9\\) with 8 conditions \\(5 BBs\\) transformed into a switch statement." "iftoswitch" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-32.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-32.c index 944362ad076..0d4411fecf7 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-32.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-32.c @@ -1,6 +1,6 @@ /* { dg-do run { target { ! "m68k*-*-* mmix*-*-* bfin*-*-* v850*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-*"} } } */ -/* { dg-options "-O2 -fno-inline -fdump-tree-reassoc1-details --param logical-op-non-short-circuit=1" } */ +/* { dg-options "-O2 -fno-inline -fdump-tree-reassoc1-details --param logical-op-non-short-circuit=1 -fno-tree-if-to-switch" } */ /* { dg-additional-options "-mbranch-cost=2" { target branch_cost } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-33.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-33.c index db0ce4c8463..d52860fa2f4 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-33.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-33.c @@ -1,6 +1,6 @@ /* { dg-do run { target { ! "m68k*-*-* mmix*-*-* bfin*-*-* v850*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* hppa*-*-* nios2*-*-* or1k-*-*-* pru*-*-*"} } } */ -/* { dg-options "-O2 -fno-inline -fdump-tree-reassoc1-details --param logical-op-non-short-circuit=1" } */ +/* { dg-options "-O2 -fno-inline -fdump-tree-reassoc1-details --param logical-op-non-short-circuit=1 -fno-tree-if-to-switch" } */ /* { dg-additional-options "-mbranch-cost=2" { target branch_cost } } */ int test (int a, int b, int c) diff --git a/gcc/timevar.def b/gcc/timevar.def index 357fcfd65c5..20ea20a6178 100644 --- a/gcc/timevar.def +++ b/gcc/timevar.def @@ -290,6 +290,7 @@ DEFTIMEVAR (TV_VAR_TRACKING , "variable tracking") DEFTIMEVAR (TV_VAR_TRACKING_DATAFLOW , "var-tracking dataflow") DEFTIMEVAR (TV_VAR_TRACKING_EMIT , "var-tracking emit") DEFTIMEVAR (TV_TREE_IFCOMBINE , "tree if-combine") +DEFTIMEVAR (TV_TREE_IF_TO_SWITCH , "if to switch conversion") DEFTIMEVAR (TV_TREE_UNINIT , "uninit var analysis") DEFTIMEVAR (TV_PLUGIN_INIT , "plugin initialization") DEFTIMEVAR (TV_PLUGIN_RUN , "plugin execution") diff --git a/gcc/tree-if-to-switch.c b/gcc/tree-if-to-switch.c new file mode 100644 index 00000000000..43984b6b7e4 --- /dev/null +++ b/gcc/tree-if-to-switch.c @@ -0,0 +1,611 @@ +/* If-elseif-else to switch conversion pass + Copyright (C) 2019 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 +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "backend.h" +#include "rtl.h" +#include "tree.h" +#include "gimple.h" +#include "tree-pass.h" +#include "ssa.h" +#include "gimple-pretty-print.h" +#include "fold-const.h" +#include "gimple-iterator.h" +#include "tree-cfg.h" +#include "tree-dfa.h" +#include "domwalk.h" +#include "tree-cfgcleanup.h" +#include "params.h" +#include "alias.h" +#include "tree-ssa-loop.h" +#include "diagnostic.h" +#include "cfghooks.h" +#include "tree-into-ssa.h" +#include "cfganal.h" + +/* Tuple that holds minimum and maximum values in a case. */ + +struct case_range +{ + /* Default constructor. */ + case_range (): + m_min (NULL_TREE), m_max (NULL_TREE) + {} + + /* Minimum case value. */ + tree m_min; + /* Maximum case value. */ + tree m_max; +}; + +/* One entry of a if chain. */ + +struct if_chain_entry +{ + /* Constructor. */ + if_chain_entry (basic_block bb, edge true_edge, edge false_edge) + : m_case_values (), m_bb (bb), + m_true_edge (true_edge), m_false_edge (false_edge) + { + m_case_values.create (2); + } + + /* Vector of at maximum 2 case ranges. */ + vec m_case_values; + /* Basic block of the original condition. */ + basic_block m_bb; + /* True edge of the gimple condition. */ + edge m_true_edge; + /* False edge of the gimple condition. */ + edge m_false_edge; +}; + +/* Master structure for one if to switch conversion candidate. */ + +struct if_chain +{ + /* Default constructor. */ + if_chain(): + m_first_condition (NULL), m_index (NULL_TREE), m_entries () + { + m_entries.create (2); + } + + /* Set index and check that it is not a different one. */ + bool set_and_check_index (tree index); + + /* Verify that all case ranges do not overlap. */ + bool check_non_overlapping_cases (); + + /* First condition of the chain. */ + gcond *m_first_condition; + /* Switch index. */ + tree m_index; + /* If chain entries. */ + vec m_entries; +}; + +bool +if_chain::set_and_check_index (tree index) +{ + if (TREE_CODE (index) != SSA_NAME || !INTEGRAL_TYPE_P (TREE_TYPE (index))) + return false; + + if (m_index == NULL) + m_index = index; + + return index == m_index; +} + +/* Compare two case ranges by minimum value. */ + +static int +range_cmp (const void *a, const void *b) +{ + const case_range *cr1 = *(const case_range * const *) a; + const case_range *cr2 = *(const case_range * const *) b; + + return tree_int_cst_compare (cr1->m_min, cr2->m_min); +} + +bool +if_chain::check_non_overlapping_cases () +{ + auto_vec all_ranges; + for (unsigned i = 0; i < m_entries.length (); i++) + for (unsigned j =0; j < m_entries[i].m_case_values.length (); j++) + all_ranges.safe_push (&m_entries[i].m_case_values[j]); + + all_ranges.qsort (range_cmp); + + for (unsigned i = 0; i < all_ranges.length () - 1; i++) + { + case_range *left = all_ranges[i]; + case_range *right = all_ranges[i + 1]; + if (tree_int_cst_le (left->m_min, right->m_min) + && tree_int_cst_le (right->m_min, left->m_max)) + return false; + } + + return true; +} + +/* DOM walker for if to switch conversion. */ + +class if_dom_walker : public dom_walker +{ +public: + if_dom_walker (cdi_direction direction) + : dom_walker (direction), all_candidates (), m_visited_bbs () + {} + + virtual edge before_dom_children (basic_block); + + /* List of all found candidates. */ + auto_vec all_candidates; + +private: + /* Bitmap of all visited basic blocks. */ + auto_bitmap m_visited_bbs; +}; + +/* Build case label with MIN and MAX values of a given basic block DEST. */ + +static tree +build_case_label (tree min, tree max, basic_block dest) +{ + tree label = gimple_block_label (dest); + return build_case_label (min, min == max ? NULL_TREE : max, label); +} + +/* Compare two integer constants. */ + +static int +label_cmp (const void *a, const void *b) +{ + const_tree l1 = *(const const_tree *) a; + const_tree l2 = *(const const_tree *) b; + + return tree_int_cst_compare (CASE_LOW (l1), CASE_LOW (l2)); +} + +/* Record all original phi arguments into PHI_MAX. Do it for + a given edge E. */ + +static void +record_phi_arguments (hash_map > *phi_map, edge e) +{ + if (phi_map->get (e->dest) == NULL) + { + vec phi_arguments; + phi_arguments.create (4); + for (gphi_iterator gsi = gsi_start_phis (e->dest); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gphi *phi = gsi.phi (); + if (!virtual_operand_p (gimple_phi_result (phi))) + phi_arguments.safe_push (PHI_ARG_DEF_FROM_EDGE (phi, e)); + } + + phi_map->put (e->dest, phi_arguments); + } +} + +/* Convert a given if CHAIN into a switch GIMPLE statement. */ + +static void +convert_if_conditions_to_switch (if_chain &chain) +{ + auto_vec labels; + if_chain_entry first_cond = chain.m_entries[0]; + + unsigned entries = chain.m_entries.length (); + edge default_edge = chain.m_entries[entries - 1].m_false_edge; + basic_block default_bb = default_edge->dest; + + /* Recond all PHI nodes that will later be fixed. */ + hash_map > phi_map; + for (unsigned i = 0; i < chain.m_entries.length (); i++) + record_phi_arguments (&phi_map, chain.m_entries[i].m_true_edge); + record_phi_arguments (&phi_map, chain.m_entries[entries - 1].m_false_edge); + + for (unsigned i = 0; i < chain.m_entries.length (); i++) + { + if_chain_entry entry = chain.m_entries[i]; + + basic_block case_bb = entry.m_true_edge->dest; + + for (unsigned j = 0; j < entry.m_case_values.length (); j++) + labels.safe_push (build_case_label (entry.m_case_values[j].m_min, + entry.m_case_values[j].m_max, + case_bb)); + default_bb = entry.m_false_edge->dest; + + if (i == 0) + { + remove_edge (first_cond.m_true_edge); + remove_edge (first_cond.m_false_edge); + } + else + delete_basic_block (entry.m_bb); + + make_edge (first_cond.m_bb, case_bb, 0); + } + + labels.qsort (label_cmp); + + edge e = find_edge (first_cond.m_bb, default_bb); + if (e == NULL) + e = make_edge (first_cond.m_bb, default_bb, 0); + gswitch *s + = gimple_build_switch (chain.m_index, + build_case_label (NULL_TREE, NULL_TREE, default_bb), + labels); + + gimple_stmt_iterator gsi = gsi_for_stmt (chain.m_first_condition); + gsi_remove (&gsi, true); + gsi_insert_before (&gsi, s, GSI_NEW_STMT); + + /* Fill up missing PHI node arguments. */ + for (hash_map >::iterator it = phi_map.begin (); + it != phi_map.end (); ++it) + { + edge e = find_edge (first_cond.m_bb, (*it).first); + unsigned i = 0; + for (gphi_iterator gsi = gsi_start_phis ((*it).first); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gphi *phi = gsi.phi (); + if (!virtual_operand_p (gimple_phi_result (phi))) + add_phi_arg (phi, (*it).second[i++], e, UNKNOWN_LOCATION); + } + } +} + +static bool +extract_case_from_stmt (tree rhs1, tree rhs2, tree_code code, tree *index, + case_range *range, unsigned *visited_stmt_count) +{ + if (code == EQ_EXPR) + { + /* Handle situation 2a: + _1 = aChar_8(D) == 1; */ + *index = rhs1; + range->m_min = rhs2; + range->m_max = range->m_min; + + if (TREE_CODE (rhs2) != INTEGER_CST) + return false; + + *visited_stmt_count += 1; + return true; + } + else if (code == LE_EXPR) + { + /* Handle situation 2b: + aChar.1_1 = (unsigned int) aChar_10(D); + _2 = aChar.1_1 + 4294967287; + _3 = _2 <= 1; */ + tree ssa = rhs1; + tree range_size = rhs2; + if (TREE_CODE (ssa) != SSA_NAME + || TREE_CODE (range_size) != INTEGER_CST) + return false; + + gassign *subtraction = dyn_cast (SSA_NAME_DEF_STMT (ssa)); + if (subtraction == NULL + || gimple_assign_rhs_code (subtraction) != PLUS_EXPR) + return false; + + tree casted = gimple_assign_rhs1 (subtraction); + tree min = gimple_assign_rhs2 (subtraction); + if (TREE_CODE (casted) != SSA_NAME + || TREE_CODE (min) != INTEGER_CST) + return false; + + if (!SSA_NAME_IS_DEFAULT_DEF (casted)) + { + gassign *to_unsigned + = dyn_cast (SSA_NAME_DEF_STMT (casted)); + if (to_unsigned == NULL + || !gimple_assign_unary_nop_p (to_unsigned) + || !TYPE_UNSIGNED (TREE_TYPE (casted))) + return false; + *index = gimple_assign_rhs1 (to_unsigned); + ++(*visited_stmt_count); + } + else + *index = casted; + + tree type = TREE_TYPE (*index); + tree range_min = fold_convert (type, const_unop (NEGATE_EXPR, type, min)); + + range->m_min = range_min; + range->m_max = const_binop (PLUS_EXPR, TREE_TYPE (*index), + range_min, fold_convert (type, range_size)); + *visited_stmt_count += 2; + return true; + } + else + return false; +} + +edge +if_dom_walker::before_dom_children (basic_block bb) +{ + if_chain chain; + unsigned total_case_values = 0; + + while (true) + { + bool first = chain.m_entries.is_empty (); + if (bitmap_bit_p (m_visited_bbs, bb->index)) + break; + bitmap_set_bit (m_visited_bbs, bb->index); + + gimple_stmt_iterator gsi = gsi_last_nondebug_bb (bb); + if (gsi_end_p (gsi)) + break; + + if (!chain.m_entries.is_empty () && EDGE_COUNT (bb->preds) != 1) + break; + + gcond *cond = dyn_cast (gsi_stmt (gsi)); + if (cond == NULL) + break; + + if (first) + chain.m_first_condition = cond; + + edge true_edge, false_edge; + extract_true_false_edges_from_block (bb, &true_edge, &false_edge); + + if_chain_entry entry (bb, true_edge, false_edge); + + /* Current we support following patterns (situations): + + 1) if condition with equal operation: + + : + if (argc_8(D) == 1) + goto ; [INV] + else + goto ; [INV] + + 2) if condition with a range check: + + : + _4 = c_13(D) + 198; + if (_4 <= 1) + goto ; [INV] + else + goto ; [INV] + + 3) mixture of 1) and 2) with a or condition: + + : + _1 = aChar_8(D) == 1; + _2 = aChar_8(D) == 10; + _3 = _1 | _2; + if (_3 != 0) + goto ; [INV] + else + goto ; [INV] + + or: + + : + aChar.1_1 = (unsigned int) aChar_10(D); + _2 = aChar.1_1 + 4294967287; + _3 = _2 <= 1; + _4 = aChar_10(D) == 12; + _5 = _3 | _4; + if (_5 != 0) + goto ; [INV] + else + goto ; [INV] + */ + + tree lhs = gimple_cond_lhs (cond); + tree rhs = gimple_cond_rhs (cond); + tree_code code = gimple_cond_code (cond); + unsigned visited_stmt_count = 0; + unsigned case_values = 0; + tree index; + + /* Situation 1. */ + if (code == EQ_EXPR) + { + case_range range; + if (!extract_case_from_stmt (lhs, rhs, code, &index, &range, + &visited_stmt_count)) + break; + if (!chain.set_and_check_index (index)) + break; + entry.m_case_values.safe_push (range); + case_values = 1; + } + /* Situation 2. */ + else if (code == LE_EXPR) + { + case_range range; + if (!extract_case_from_stmt (lhs, rhs, code, &index, &range, + &visited_stmt_count)) + break; + if (!chain.set_and_check_index (index)) + break; + entry.m_case_values.safe_push (range); + case_values = 1; + } + /* Situation 3. */ + else if (code == NE_EXPR + && integer_zerop (rhs) + && TREE_CODE (lhs) == SSA_NAME + && TREE_CODE (TREE_TYPE (lhs)) == BOOLEAN_TYPE) + { + gassign *def = dyn_cast (SSA_NAME_DEF_STMT (lhs)); + if (def == NULL + || gimple_assign_rhs_code (def) != BIT_IOR_EXPR + || gimple_bb (def) != bb) + break; + + tree rhs1 = gimple_assign_rhs1 (def); + tree rhs2 = gimple_assign_rhs2 (def); + if (TREE_CODE (rhs1) != SSA_NAME || TREE_CODE (rhs2) != SSA_NAME) + break; + + gassign *def1 = dyn_cast (SSA_NAME_DEF_STMT (rhs1)); + gassign *def2 = dyn_cast (SSA_NAME_DEF_STMT (rhs2)); + if (def1 == NULL + || def2 == NULL + || def1 == def2 + || gimple_bb (def1) != bb + || gimple_bb (def2) != bb) + break; + + case_range range1; + if (!extract_case_from_stmt (gimple_assign_rhs1 (def1), + gimple_assign_rhs2 (def1), + gimple_assign_rhs_code (def1), + &index, &range1, + &visited_stmt_count)) + break; + rhs = gimple_assign_rhs2 (def1); + if (!chain.set_and_check_index (index)) + break; + entry.m_case_values.safe_push (range1); + + case_range range2; + if (!extract_case_from_stmt (gimple_assign_rhs1 (def2), + gimple_assign_rhs2 (def2), + gimple_assign_rhs_code (def2), + &index, &range2, + &visited_stmt_count)) + break; + rhs = gimple_assign_rhs2 (def2); + if (!chain.set_and_check_index (index)) + break; + entry.m_case_values.safe_push (range2); + case_values = 2; + visited_stmt_count += 2; + } + else + break; + + /* If it's not the first condition, then we need a BB without + any statements. */ + if (!first) + { + unsigned stmt_count = 0; + for (gimple_stmt_iterator gsi = gsi_start_nondebug_bb (bb); + !gsi_end_p (gsi); gsi_next_nondebug (&gsi)) + ++stmt_count; + + if (stmt_count - visited_stmt_count != 0) + break; + } + + total_case_values += case_values; + chain.m_entries.safe_push (entry); + + /* Follow if-elseif-elseif chain. */ + bb = false_edge->dest; + } + + if (total_case_values >= 3 + && chain.check_non_overlapping_cases ()) + { + if (dump_file) + { + expanded_location loc + = expand_location (gimple_location (chain.m_first_condition)); + fprintf (dump_file, "Condition chain (at %s:%d) with %d conditions " + "(%d BBs) transformed into a switch statement.\n", + loc.file, loc.line, total_case_values, + chain.m_entries.length ()); + } + + all_candidates.safe_push (chain); + } + + return NULL; +} + +namespace { + +const pass_data pass_data_if_to_switch = +{ + GIMPLE_PASS, /* type */ + "iftoswitch", /* name */ + OPTGROUP_NONE, /* optinfo_flags */ + TV_TREE_IF_TO_SWITCH, /* tv_id */ + ( PROP_cfg | PROP_ssa ), /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + TODO_cleanup_cfg | TODO_update_ssa /* todo_flags_finish */ +}; + +class pass_if_to_switch : public gimple_opt_pass +{ +public: + pass_if_to_switch (gcc::context *ctxt) + : gimple_opt_pass (pass_data_if_to_switch, ctxt) + {} + + /* opt_pass methods: */ + virtual bool gate (function *) { return flag_tree_if_to_switch != 0; } + virtual unsigned int execute (function *); + +}; // class pass_if_to_switch + +unsigned int +pass_if_to_switch::execute (function *fun) +{ + /* We might consider making this a property of each pass so that it + can be [re]computed on an as-needed basis. Particularly since + this pass could be seen as an extension of DCE which needs post + dominators. */ + calculate_dominance_info (CDI_DOMINATORS); + + /* Dead store elimination is fundamentally a walk of the post-dominator + tree and a backwards walk of statements within each block. */ + if_dom_walker walker (CDI_DOMINATORS); + walker.walk (fun->cfg->x_entry_block_ptr); + + for (unsigned i = 0; i < walker.all_candidates.length (); i++) + convert_if_conditions_to_switch (walker.all_candidates[i]); + + /* For now, just wipe the dominator information. */ + free_dominance_info (CDI_DOMINATORS); + + mark_virtual_operands_for_renaming (cfun); + + return 0; +} + +} // anon namespace + +gimple_opt_pass * +make_pass_if_to_switch (gcc::context *ctxt) +{ + return new pass_if_to_switch (ctxt); +} diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index a987661530e..84c498cb26e 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -374,6 +374,7 @@ extern gimple_opt_pass *make_pass_empty_loop (gcc::context *ctxt); extern gimple_opt_pass *make_pass_graphite (gcc::context *ctxt); extern gimple_opt_pass *make_pass_graphite_transforms (gcc::context *ctxt); extern gimple_opt_pass *make_pass_if_conversion (gcc::context *ctxt); +extern gimple_opt_pass *make_pass_if_to_switch (gcc::context *ctxt); extern gimple_opt_pass *make_pass_loop_distribution (gcc::context *ctxt); extern gimple_opt_pass *make_pass_vectorize (gcc::context *ctxt); extern gimple_opt_pass *make_pass_simduid_cleanup (gcc::context *ctxt);