From patchwork Fri Nov 16 03:57:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andi Kleen X-Patchwork-Id: 998730 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-490217-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=firstfloor.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="QuQS6ywo"; dkim=pass (1024-bit key; unprotected) header.d=firstfloor.org header.i=@firstfloor.org header.b="kW5vZAnh"; 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 42x4Fc078bz9s0t for ; Fri, 16 Nov 2018 14:57:55 +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 :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; q=dns; s=default; b=B2R ixqeA1zA8uK/iKT/L6KpcDFhjUv+2VL67IroJJ8hbTfq+bH6/60/rQaz0NFmmJ6z Au4l72BJk/epergyC3pKyKYPooaYL1iczr6UPdcACwGRAejoio8vg/CwqP9Tsk8g A2dHPefLS3manIAjs+B9vSlVSIa8hhHIf7/2ANF0= 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 :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=default; bh=3yuknCWDZ rbtaTbB3iQlLnktrlw=; b=QuQS6ywobqvHPQsfuGviplgfN6gGOrq1N8oVVgMAG 1uel6JkP57D95fWvHPlaTkjGubePpD6mLjDDwcswCVEpUoTyyeawIBTFzdAIbPLl Ce1TbsWSURCP3OO/3YtOJCx/5OprzD8I5LdYhAt3JItmy6SlqdLKCq8DpTEitieD pM= Received: (qmail 66469 invoked by alias); 16 Nov 2018 03:57:26 -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 66360 invoked by uid 89); 16 Nov 2018 03:57:26 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-24.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS, UNWANTED_LANGUAGE_BODY autolearn=ham version=3.3.2 spammy= X-HELO: one.firstfloor.org Received: from one.firstfloor.org (HELO one.firstfloor.org) (193.170.194.197) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 16 Nov 2018 03:57:23 +0000 Received: from firstfloor.org (c-71-238-43-142.hsd1.or.comcast.net [71.238.43.142]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by one.firstfloor.org (Postfix) with ESMTPSA id E48EF868FF; Fri, 16 Nov 2018 04:57:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=firstfloor.org; s=mail; t=1542340639; bh=rLCWlKxT9vICvLxnFDYi6rs8Do0mJBxJZaCg43RlvBw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kW5vZAnhovGYtVHPiypc2GV+ujkKeQYdPo381agR3aVdIe31+bCGCTmJCcv/WzRNI 0Cc4xd8TL8AMRntbd6eXLmLd2qd8v7p9k3UumGCZ8s67u4Qid6yIqgTggMh73LgDuv cV5AW63CT4F1qCTtKtiP/II5prhyQKVTVr2T0Fn4= Received: by firstfloor.org (Postfix, from userid 1000) id AFDACA6E35; Thu, 15 Nov 2018 19:57:14 -0800 (PST) From: Andi Kleen To: gcc-patches@gcc.gnu.org Cc: richard.guenther@gmail.com, ubizjak@gmail.com, msebor@gmail.com, Andi Kleen Subject: [PATCH v2 3/3] Add tests for the vartrace pass Date: Thu, 15 Nov 2018 19:57:04 -0800 Message-Id: <20181116035704.14820-4-andi@firstfloor.org> In-Reply-To: <20181116035704.14820-3-andi@firstfloor.org> References: <20181116035704.14820-1-andi@firstfloor.org> <20181116035704.14820-2-andi@firstfloor.org> <20181116035704.14820-3-andi@firstfloor.org> MIME-Version: 1.0 From: Andi Kleen So far they are mostly i386 target specific. Later they could be moved up to architecture specific if some other architecture adds vartracing. gcc/testsuite/: 2018-11-15 Andi Kleen * g++.dg/vartrace-3.C: New test. * g++.dg/vartrace-ret.C: New test. * g++.dg/vartrace-ret2.C: New test. * gcc.target/i386/vartrace-1.c: New test. * gcc.target/i386/vartrace-10.c: New test. * gcc.target/i386/vartrace-11.c: New test. * gcc.target/i386/vartrace-12.c: New test. * gcc.target/i386/vartrace-13.c: New test. * gcc.target/i386/vartrace-14.c: New test. * gcc.target/i386/vartrace-15.c: New test. * gcc.target/i386/vartrace-16.c: New test. * gcc.target/i386/vartrace-17.c: New test. * gcc.target/i386/vartrace-18.c: New test. * gcc.target/i386/vartrace-19.c: New test. * gcc.target/i386/vartrace-20.c: New test. * gcc.target/i386/vartrace-2.c: New test. * gcc.target/i386/vartrace-3.c: New test. * gcc.target/i386/vartrace-4.c: New test. * gcc.target/i386/vartrace-5.c: New test. * gcc.target/i386/vartrace-6.c: New test. * gcc.target/i386/vartrace-7.c: New test. * gcc.target/i386/vartrace-8.c: New test. * gcc.target/i386/vartrace-9.c: New test. --- gcc/testsuite/g++.dg/vartrace-3.C | 14 +++++++ gcc/testsuite/g++.dg/vartrace-ret.C | 17 +++++++++ gcc/testsuite/g++.dg/vartrace-ret2.C | 24 ++++++++++++ gcc/testsuite/gcc.target/i386/vartrace-1.c | 41 +++++++++++++++++++++ gcc/testsuite/gcc.target/i386/vartrace-10.c | 13 +++++++ gcc/testsuite/gcc.target/i386/vartrace-11.c | 16 ++++++++ gcc/testsuite/gcc.target/i386/vartrace-12.c | 16 ++++++++ gcc/testsuite/gcc.target/i386/vartrace-13.c | 18 +++++++++ gcc/testsuite/gcc.target/i386/vartrace-14.c | 17 +++++++++ gcc/testsuite/gcc.target/i386/vartrace-15.c | 12 ++++++ gcc/testsuite/gcc.target/i386/vartrace-16.c | 12 ++++++ gcc/testsuite/gcc.target/i386/vartrace-17.c | 23 ++++++++++++ gcc/testsuite/gcc.target/i386/vartrace-18.c | 20 ++++++++++ gcc/testsuite/gcc.target/i386/vartrace-19.c | 22 +++++++++++ gcc/testsuite/gcc.target/i386/vartrace-2.c | 9 +++++ gcc/testsuite/gcc.target/i386/vartrace-20.c | 23 ++++++++++++ gcc/testsuite/gcc.target/i386/vartrace-3.c | 9 +++++ gcc/testsuite/gcc.target/i386/vartrace-4.c | 13 +++++++ gcc/testsuite/gcc.target/i386/vartrace-5.c | 11 ++++++ gcc/testsuite/gcc.target/i386/vartrace-6.c | 13 +++++++ gcc/testsuite/gcc.target/i386/vartrace-7.c | 11 ++++++ gcc/testsuite/gcc.target/i386/vartrace-8.c | 11 ++++++ gcc/testsuite/gcc.target/i386/vartrace-9.c | 10 +++++ gcc/testsuite/gcc.target/vartrace-19.c | 23 ++++++++++++ 24 files changed, 398 insertions(+) create mode 100644 gcc/testsuite/g++.dg/vartrace-3.C create mode 100644 gcc/testsuite/g++.dg/vartrace-ret.C create mode 100644 gcc/testsuite/g++.dg/vartrace-ret2.C create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-1.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-10.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-11.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-12.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-13.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-14.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-15.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-16.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-17.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-18.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-19.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-2.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-20.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-3.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-4.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-5.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-6.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-7.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-8.c create mode 100644 gcc/testsuite/gcc.target/i386/vartrace-9.c create mode 100644 gcc/testsuite/gcc.target/vartrace-19.c diff --git a/gcc/testsuite/g++.dg/vartrace-3.C b/gcc/testsuite/g++.dg/vartrace-3.C new file mode 100644 index 00000000000..217db297baa --- /dev/null +++ b/gcc/testsuite/g++.dg/vartrace-3.C @@ -0,0 +1,14 @@ +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -mptwrite -fvartrace=args " } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +int a; +int b(int c) +{ + if (a) + c += 1; + else + c += b(a); + b(c); + return 0; +} diff --git a/gcc/testsuite/g++.dg/vartrace-ret.C b/gcc/testsuite/g++.dg/vartrace-ret.C new file mode 100644 index 00000000000..5824e3f3738 --- /dev/null +++ b/gcc/testsuite/g++.dg/vartrace-ret.C @@ -0,0 +1,17 @@ +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -mptwrite -fvartrace=returns " } */ +/* { dg-final { scan-assembler-not "ptwrite" } } */ + +class foo { +public: + short a; + short b; +}; + +foo f1() +{ + foo x = { 1, 2 }; + return x; +} + + diff --git a/gcc/testsuite/g++.dg/vartrace-ret2.C b/gcc/testsuite/g++.dg/vartrace-ret2.C new file mode 100644 index 00000000000..56842d75fb6 --- /dev/null +++ b/gcc/testsuite/g++.dg/vartrace-ret2.C @@ -0,0 +1,24 @@ +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -mptwrite -fvartrace " } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +typedef int a; +enum b +{ }; +struct ac +{ + a operator () (a, a, a, a, a, a); +}; +struct c +{ + ac ag; +} extern ai[]; +a d; +void +l (a e) +{ + b f; + a g, h, i, j, k; + e = d; + ai[f].ag (e, g, h, i, j, k); +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-1.c b/gcc/testsuite/gcc.target/i386/vartrace-1.c new file mode 100644 index 00000000000..dde60c12d54 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-1.c @@ -0,0 +1,41 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite -fvartrace -fvartrace=locals" } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +int foo; + +extern void f2 (void); + +void +f0 (void) +{ + foo += 1; +} + +int +f3 (int a) +{ + return a * 2; +} + +extern void extfunc (int); + +int +f4 (int a, int b) +{ + extfunc (a); + extfunc (b); + return a + b; +} + +void +f5 (int a) +{ +} + +int +f (int a, int b) +{ + f2 (); + return a + b + foo; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-10.c b/gcc/testsuite/gcc.target/i386/vartrace-10.c new file mode 100644 index 00000000000..37f2ede23ee --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-10.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite -fvartrace" } */ +/* { dg-final { scan-assembler-not "ptwrite" } } */ + +int a __attribute__ ((no_vartrace)); + +extern void f2 (int); + +void +f (void) +{ + f2 (a); +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-11.c b/gcc/testsuite/gcc.target/i386/vartrace-11.c new file mode 100644 index 00000000000..3ad792fee34 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-11.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite" } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +struct foo +{ + __attribute__ ((vartrace)) int field; +}; + +struct foo a; + +int +f (void) +{ + return a.field; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-12.c b/gcc/testsuite/gcc.target/i386/vartrace-12.c new file mode 100644 index 00000000000..7f721e3beb7 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-12.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite" } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +struct foo +{ + int field; +} __attribute__ ((vartrace)); + +struct foo a; + +int +f (void) +{ + return a.field; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-13.c b/gcc/testsuite/gcc.target/i386/vartrace-13.c new file mode 100644 index 00000000000..94802596d72 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-13.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite -fvartrace" } */ +/* { dg-final { scan-assembler-not "ptwrite" } } */ + +struct foo +{ + int field; +} __attribute__ ((no_vartrace)); + +struct foo a; + +extern void f2 (int); + +int +f (void) +{ + f2 (a.field); +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-14.c b/gcc/testsuite/gcc.target/i386/vartrace-14.c new file mode 100644 index 00000000000..d4db8bf735b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-14.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite -fvartrace" } */ +/* { dg-final { scan-assembler-not "ptwrite" } } */ + +struct foo +{ + int __attribute__((no_vartrace)) field; +}; + +struct foo a; + +extern void f2(int); + +int f(void) +{ + f2 (a.field); +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-15.c b/gcc/testsuite/gcc.target/i386/vartrace-15.c new file mode 100644 index 00000000000..02067a016e3 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-15.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-mptwrite -fvartrace" } */ +/* { dg-final { scan-assembler-not "ptwrite" } } */ + +struct { + int __attribute__((vartrace)) x; +} v; + +__attribute__((target("no-ptwrite"))) int f(void) +{ + return v.x; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-16.c b/gcc/testsuite/gcc.target/i386/vartrace-16.c new file mode 100644 index 00000000000..6d3014af688 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-16.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "" } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +struct { + int __attribute__((vartrace)) x; +} v; + +__attribute__((target("ptwrite"))) int f(void) +{ + return v.x; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-17.c b/gcc/testsuite/gcc.target/i386/vartrace-17.c new file mode 100644 index 00000000000..131db24f19c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-17.c @@ -0,0 +1,23 @@ +/* Test optimization for redundant PTWRITEs */ +/* So far XFAIL because we generate redundant PTWRITEs */ +/* { dg-do compile } */ +/* { dg-options "-fvartrace -mptwrite" } */ +/* { dg-final { scan-assembler-times "ptwrite" 8 { xfail *-*-* } } } */ + +int read_locals(int a, int b) +{ + return a+b; +} + +int x; + +int global(int a) +{ + x += a; + return x + a; +} + +int pointer_ref(int *f) +{ + return *f++; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-18.c b/gcc/testsuite/gcc.target/i386/vartrace-18.c new file mode 100644 index 00000000000..3b3b1fa9dee --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-18.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-fvartrace=reads -mptwrite" } */ +/* { dg-final { scan-assembler-times "ptwrite" 2 } } */ +/* Source: Martin Sebor */ + +int global __attribute__((no_vartrace)); +int array[10]; + +int f(void) +{ + return array[global]; +} + +int array2[10] __attribute__((no_vartrace)); +int global2; + +int f2(void) +{ + return array2[global2]; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-19.c b/gcc/testsuite/gcc.target/i386/vartrace-19.c new file mode 100644 index 00000000000..1d03029a3f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-19.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-fvartrace=reads,writes -mptwrite" } */ +/* { dg-final { scan-assembler-times "ptwrite" 5 } } */ +/* Should be really 4 times, but so far still one redundant ptwrite */ + +int global; +int global2; + +void f1(int i) +{ + asm("nop" :: "r" (i) : "memory"); +} + +void f2(void) +{ + asm("nop" : "=m" (global) :: "memory"); +} + +void f3(void) +{ + asm("nop" : "=m" (global) : "r" (global2) : "memory"); +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-2.c b/gcc/testsuite/gcc.target/i386/vartrace-2.c new file mode 100644 index 00000000000..6c89bc32721 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-2.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite -fvartrace=args" } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +int +f (int a) +{ + return a; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-20.c b/gcc/testsuite/gcc.target/i386/vartrace-20.c new file mode 100644 index 00000000000..4bc58a34430 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-20.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-fvartrace=reads -mptwrite" } */ +/* { dg-final { scan-assembler-times "ptwrite" 2 } } */ + +int global; + +int f1(void) +{ + switch (global) + { + case 1: + return 1; + default: + return 0; + } +} + +int f2(void) +{ + if (global > 0) + return 1; + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-3.c b/gcc/testsuite/gcc.target/i386/vartrace-3.c new file mode 100644 index 00000000000..c4397ff468c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-3.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite -fvartrace=returns" } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +int +f (int a) +{ + return a; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-4.c b/gcc/testsuite/gcc.target/i386/vartrace-4.c new file mode 100644 index 00000000000..d8dc1786e28 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-4.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite -fvartrace=reads" } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +int a; + +extern void f2 (int); + +int +f (void) +{ + f2 (a); +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-5.c b/gcc/testsuite/gcc.target/i386/vartrace-5.c new file mode 100644 index 00000000000..feedab90965 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-5.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite -fvartrace=writes" } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +int a; + +void +f (void) +{ + a++; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-6.c b/gcc/testsuite/gcc.target/i386/vartrace-6.c new file mode 100644 index 00000000000..c78ec3322ad --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-6.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite -fvartrace=reads -fvartrace=locals" } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +extern void f2 (void); + +void +f (void) +{ + int i; + for (i = 0; i < 10; i++) + f2 (); +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-7.c b/gcc/testsuite/gcc.target/i386/vartrace-7.c new file mode 100644 index 00000000000..99269d70a75 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-7.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite" } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +int a __attribute__ ((vartrace)); + +int +f (void) +{ + return a; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-8.c b/gcc/testsuite/gcc.target/i386/vartrace-8.c new file mode 100644 index 00000000000..ceef61944ea --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-8.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite" } */ +/* { dg-final { scan-assembler "ptwrite" } } */ + +int a; + +__attribute__ ((vartrace)) + int f (void) +{ + return a; +} diff --git a/gcc/testsuite/gcc.target/i386/vartrace-9.c b/gcc/testsuite/gcc.target/i386/vartrace-9.c new file mode 100644 index 00000000000..9216b0776b9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/vartrace-9.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mptwrite -fvartrace" } */ +/* { dg-final { scan-assembler-not "ptwrite" } } */ + +int a; + +__attribute__ ((no_vartrace)) int f (void) +{ + return a; +} diff --git a/gcc/testsuite/gcc.target/vartrace-19.c b/gcc/testsuite/gcc.target/vartrace-19.c new file mode 100644 index 00000000000..7de0324fd34 --- /dev/null +++ b/gcc/testsuite/gcc.target/vartrace-19.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-fvartrace=reads,writes -mptwrite" } */ +/* { dg-final { scan-assembler-times "ptwrite" 7 } } */ +/* XXX: should be 4 ptwrites, but right now we generate redundant ones */ + +int global; +int global2; + +__attribute__((vartrace)) +void f1(int i) +{ + asm("nop" :: "r" (i) : "memory"); +} + +void f2(void) +{ + asm("nop" : "=m" (global) :: "memory"); +} + +void f3(void) +{ + asm("nop" : "=m" (global) : "r" (global2) : "memory"); +}