From patchwork Fri Mar 24 23:20:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Van Oostenryck X-Patchwork-Id: 9644205 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 67EBF60328 for ; Fri, 24 Mar 2017 23:24:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5A46926530 for ; Fri, 24 Mar 2017 23:24:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4EFFE27317; Fri, 24 Mar 2017 23:24:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0811E27C0B for ; Fri, 24 Mar 2017 23:24:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935932AbdCXXYK (ORCPT ); Fri, 24 Mar 2017 19:24:10 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:34346 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935953AbdCXXX5 (ORCPT ); Fri, 24 Mar 2017 19:23:57 -0400 Received: by mail-wm0-f65.google.com with SMTP id u132so810381wmg.1 for ; Fri, 24 Mar 2017 16:23:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=5IeoS09Ak3Ic1ddb2Y7r7r8RrL+Td8iuGgd1V8+IvQk=; b=Kk279Lp2wEHPaD1EujHCUXU32Fji8Gf/NO8wZWyk1JILBuNJE+sIXF6HxCPBn4TQYe gZEbUZE1Bm4c3oaDeW5CgTgDYWiENKa8NDe5Z2JkrfPcuiqK2GMNuL31bvTocLk1jV7g zfyvMniPalBTqTtg2C4FTQYp2t81ovc6tnUjP+e2RbTTCkfqo9xmsWdkND9mjmzD8A4t JnibzMwko/9xhPcgDlUQNBtlGkw60D6ctqGWDfEPfnAolHTUbyuqm9gnr+I8ffxqxFlT v5nxFHy6iInmHkN8Nb6PyO+r+7aBNIx6VlNgp7zvV9DXms+r76ZWeUvrL3zkz8unxpJJ MMWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=5IeoS09Ak3Ic1ddb2Y7r7r8RrL+Td8iuGgd1V8+IvQk=; b=oUuZUtkIvot9maM/l6gFh0trpvAZeGEBmU9R5uoBh9lyjbRvJpdzbtW+yGDX20bk5R qXc+K72h2KbjhEFgZ2I4j5k7a0oBDnZxopYRRlKbLU2O2/j2ISklLe09ofVID47kDQI3 hxm1Q1EXy/i5mqWYHi+i36IH3uLDUptEABu2U3JjU8SoIUZHl40qCYGUXR4e2NUCO0dl wJbbPlIIn5KRBcq3BDDgRtSQIfYQqYmnusaTNPSyQM0X0JcVcZNIAISzV+B/DYYhzIsO DCdPR9lzuN7wlOtR/glHXjOvdqA/AmgJgvqKGVCKsXarbdIVODMnOFK3Hj0WI3ISFpCL TrMg== X-Gm-Message-State: AFeK/H21kWNVWXb9xLorvbLlGyU5b3FROJ7miT1eHoT5wnAyB+OPgWiu58r11jSkW0OMFA== X-Received: by 10.28.138.134 with SMTP id m128mr5268194wmd.121.1490397835908; Fri, 24 Mar 2017 16:23:55 -0700 (PDT) Received: from localhost.localdomain ([2a02:a03f:802:b00:81c3:4cc:f845:762c]) by smtp.gmail.com with ESMTPSA id m188sm4203730wmm.7.2017.03.24.16.23.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 Mar 2017 16:23:55 -0700 (PDT) From: Luc Van Oostenryck To: linux-sparse@vger.kernel.org Cc: Christopher Li , Luc Van Oostenryck Subject: [PATCH v5 31/51] llvm: add support for OP_SWITCH with a range Date: Sat, 25 Mar 2017 00:20:37 +0100 Message-Id: <20170324232057.15033-32-luc.vanoostenryck@gmail.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170324232057.15033-1-luc.vanoostenryck@gmail.com> References: <20170324232057.15033-1-luc.vanoostenryck@gmail.com> Sender: linux-sparse-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sparse@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Luc Van Oostenryck --- sparse-llvm.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/sparse-llvm.c b/sparse-llvm.c index 6530d2d59..035c7b42d 100644 --- a/sparse-llvm.c +++ b/sparse-llvm.c @@ -760,10 +760,8 @@ static void output_op_switch(struct function *fn, struct instruction *insn) int n_jmp = 0; FOR_EACH_PTR(insn->multijmp_list, jmp) { - if (jmp->begin == jmp->end) { /* case N */ - n_jmp++; - } else if (jmp->begin < jmp->end) { /* case M..N */ - assert(0); + if (jmp->begin <= jmp->end) { + n_jmp += (jmp->end - jmp->begin) + 1; } else /* default case */ def = jmp->target; } END_FOR_EACH_PTR(jmp); @@ -773,12 +771,11 @@ static void output_op_switch(struct function *fn, struct instruction *insn) def ? def->priv : NULL, n_jmp); FOR_EACH_PTR(insn->multijmp_list, jmp) { - if (jmp->begin == jmp->end) { /* case N */ - LLVMAddCase(target, - val_to_value(jmp->begin, insn->type), - jmp->target->priv); - } else if (jmp->begin < jmp->end) { /* case M..N */ - assert(0); + long val; + + for (val = jmp->begin; val <= jmp->end; val++) { + LLVMValueRef Val = val_to_value(val, insn->type); + LLVMAddCase(target, Val, jmp->target->priv); } } END_FOR_EACH_PTR(jmp);