forked from GPUOpen-Drivers/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merged master:c6f51377e12b into amd-gfx:4a16eb27d030
Local branch amd-gfx 4a16eb2 Merged master:06d100a69a08 into amd-gfx:9bd98790e775 Remote branch master c6f5137 [libcxx/variant] Add a few benchmarks for .
- Loading branch information
Showing
14 changed files
with
210 additions
and
84 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
// -*- C++ -*- | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef BENCHMARK_VARIANT_BENCHMARKS_H | ||
#define BENCHMARK_VARIANT_BENCHMARKS_H | ||
|
||
#include <array> | ||
#include <cstddef> | ||
#include <tuple> | ||
#include <type_traits> | ||
#include <variant> | ||
|
||
#include "benchmark/benchmark.h" | ||
|
||
#include "GenerateInput.h" | ||
|
||
namespace VariantBenchmarks { | ||
|
||
template <std::size_t I> | ||
struct S { | ||
static constexpr size_t v = I; | ||
}; | ||
|
||
template <std::size_t N, std::size_t... Is> | ||
static auto genVariants(std::index_sequence<Is...>) { | ||
using V = std::variant<S<Is>...>; | ||
using F = V (*)(); | ||
static constexpr F fs[] = {[] { return V(std::in_place_index<Is>); }...}; | ||
|
||
std::array<V, N> result = {}; | ||
for (auto& v : result) { | ||
v = fs[getRandomInteger(0ul, sizeof...(Is) - 1)](); | ||
} | ||
|
||
return result; | ||
} | ||
|
||
template <std::size_t N, std::size_t Alts> | ||
static void BM_Visit(benchmark::State& state) { | ||
auto args = genVariants<N>(std::make_index_sequence<Alts>{}); | ||
for (auto _ : state) { | ||
benchmark::DoNotOptimize(std::apply( | ||
[](auto... vs) { | ||
return std::visit([](auto... is) { return (is.v + ... + 0); }, vs...); | ||
}, | ||
args)); | ||
} | ||
} | ||
|
||
} // end namespace VariantBenchmarks | ||
|
||
#endif // BENCHMARK_VARIANT_BENCHMARKS_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
#include "benchmark/benchmark.h" | ||
|
||
#include "VariantBenchmarks.h" | ||
|
||
using namespace VariantBenchmarks; | ||
|
||
BENCHMARK_TEMPLATE(BM_Visit, 1, 1); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 2); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 3); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 4); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 5); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 6); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 7); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 8); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 9); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 10); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 20); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 30); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 40); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 50); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 60); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 70); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 80); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 90); | ||
BENCHMARK_TEMPLATE(BM_Visit, 1, 100); | ||
|
||
BENCHMARK_MAIN(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
#include "benchmark/benchmark.h" | ||
|
||
#include "VariantBenchmarks.h" | ||
|
||
using namespace VariantBenchmarks; | ||
|
||
BENCHMARK_TEMPLATE(BM_Visit, 2, 1); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 2); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 3); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 4); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 5); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 6); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 7); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 8); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 9); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 10); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 20); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 30); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 40); | ||
BENCHMARK_TEMPLATE(BM_Visit, 2, 50); | ||
|
||
BENCHMARK_MAIN(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
#include "benchmark/benchmark.h" | ||
|
||
#include "VariantBenchmarks.h" | ||
|
||
using namespace VariantBenchmarks; | ||
|
||
BENCHMARK_TEMPLATE(BM_Visit, 3, 1); | ||
BENCHMARK_TEMPLATE(BM_Visit, 3, 2); | ||
BENCHMARK_TEMPLATE(BM_Visit, 3, 3); | ||
BENCHMARK_TEMPLATE(BM_Visit, 3, 4); | ||
BENCHMARK_TEMPLATE(BM_Visit, 3, 5); | ||
BENCHMARK_TEMPLATE(BM_Visit, 3, 6); | ||
BENCHMARK_TEMPLATE(BM_Visit, 3, 7); | ||
BENCHMARK_TEMPLATE(BM_Visit, 3, 8); | ||
BENCHMARK_TEMPLATE(BM_Visit, 3, 9); | ||
BENCHMARK_TEMPLATE(BM_Visit, 3, 10); | ||
BENCHMARK_TEMPLATE(BM_Visit, 3, 15); | ||
BENCHMARK_TEMPLATE(BM_Visit, 3, 20); | ||
|
||
BENCHMARK_MAIN(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
; RUN: opt -S -globalopt < %s | FileCheck %s | ||
; Generated at -O2 -g from: | ||
; typedef struct {} a; | ||
; static struct { | ||
; long b; | ||
; a c; | ||
; } d; | ||
; e() { | ||
; long f = d.b + 1; | ||
; d.b = f; | ||
; } | ||
; (IR is modified so that d's struct type is forward declared.) | ||
|
||
; Check that the global variable "d" is not | ||
; emitted as a fragment if its struct type is | ||
; forward declared but d.c has zero length, so | ||
; a fragment shouldn't be emitted. | ||
|
||
source_filename = "t.c" | ||
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" | ||
target triple = "x86_64-unknown-linux-gnu" | ||
|
||
%struct.anon = type { i64, %struct.a } | ||
%struct.a = type {} | ||
|
||
; CHECK: @d.0 = internal unnamed_addr global i64 0, align 8, !dbg ![[GVE:.*]] | ||
@d = internal global %struct.anon zeroinitializer, align 8, !dbg !0 | ||
|
||
; Function Attrs: noinline nounwind uwtable | ||
define dso_local i32 @e() #0 !dbg !18 { | ||
entry: | ||
%0 = load i64, i64* getelementptr inbounds (%struct.anon, %struct.anon* @d, i32 0, i32 0), align 8 | ||
%add = add nsw i64 %0, 1 | ||
call void @llvm.dbg.value(metadata i64 %add, metadata !24, metadata !DIExpression()), !dbg !25 | ||
store i64 %add, i64* getelementptr inbounds (%struct.anon, %struct.anon* @d, i32 0, i32 0), align 8 | ||
ret i32 undef | ||
} | ||
|
||
; Function Attrs: nounwind readnone speculatable willreturn | ||
declare void @llvm.dbg.declare(metadata, metadata, metadata) | ||
|
||
; Function Attrs: nounwind readnone speculatable willreturn | ||
declare void @llvm.dbg.value(metadata, metadata, metadata) | ||
|
||
!llvm.dbg.cu = !{!2} | ||
!llvm.module.flags = !{!14, !15} | ||
|
||
; CHECK: ![[GVE]] = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) | ||
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) | ||
!1 = distinct !DIGlobalVariable(name: "d", scope: !2, file: !3, line: 6, type: !7, isLocal: true, isDefinition: true) | ||
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !{}, globals: !{!0}, splitDebugInlining: false, nameTableKind: None) | ||
!3 = !DIFile(filename: "t.c", directory: "/") | ||
!7 = distinct !DICompositeType(tag: DW_TAG_structure_type, file: !3, line: 3, flags: DIFlagFwdDecl) | ||
!10 = !DIBasicType(name: "long int", size: 64, encoding: DW_ATE_signed) | ||
!12 = !DIDerivedType(tag: DW_TAG_typedef, name: "a", file: !3, line: 2, baseType: !13) | ||
!13 = distinct !DICompositeType(tag: DW_TAG_structure_type, file: !3, line: 1, elements: !{}) | ||
!14 = !{i32 7, !"Dwarf Version", i32 4} | ||
!15 = !{i32 2, !"Debug Info Version", i32 3} | ||
!18 = distinct !DISubprogram(name: "e", scope: !3, file: !3, line: 7, type: !19, scopeLine: 7, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !{}) | ||
!19 = !DISubroutineType(types: !{!21}) | ||
!21 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) | ||
!24 = !DILocalVariable(name: "f", scope: !18, file: !3, line: 8, type: !10) | ||
!25 = !DILocation(line: 0, scope: !18) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.