From ddbdc9a86ec6aa2b449f94003bdaa1bf9e16b3b0 Mon Sep 17 00:00:00 2001 From: Stanislav Mekhanoshin Date: Wed, 19 Nov 2025 10:24:06 -0800 Subject: [PATCH 01/48] [AMDGPU] Add baseline test to show spilling of wmma scale. NFC (#168163) This is to show the spilling of WMMA scale values which are limited to low 256 VGPRs. We have free registers, just RA allocates low 256 first. --- .../AMDGPU/regalloc-spill-wmma-scale.ll | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 llvm/test/CodeGen/AMDGPU/regalloc-spill-wmma-scale.ll diff --git a/llvm/test/CodeGen/AMDGPU/regalloc-spill-wmma-scale.ll b/llvm/test/CodeGen/AMDGPU/regalloc-spill-wmma-scale.ll new file mode 100644 index 0000000000000..1ac3da3b930f9 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/regalloc-spill-wmma-scale.ll @@ -0,0 +1,131 @@ +; RUN: llc -mtriple=amdgcn -mcpu=gfx1250 < %s | FileCheck %s + +; FIXME: Scale operands of WMMA are limited to low 256 VGPRs +; currently we are spilling it because all low VGPRs are occupied even though our budget is higher. +; Make sure we do not spill scale operands because of the low 256 restriction. +; CHECK: ; ScratchSize: 12 +; CHECK: ; Occupancy: 1 + +define amdgpu_kernel void @spill_scale_test(float %arg, float %arg1, float %arg2, float %arg3, float %arg4, float %arg5, float %arg6, float %arg7, <16 x i32> %arg8, float %arg9, <16 x i32> %arg10, float %arg11, <16 x i8> %arg12) #0 { +bb: + %i = shufflevector <16 x i8> %arg12, <16 x i8> zeroinitializer, <64 x i32> + tail call void @llvm.amdgcn.global.load.async.to.lds.b32(ptr addrspace(1) null, ptr addrspace(3) null, i32 0, i32 0) + %i13 = bitcast <64 x i8> %i to <16 x i32> + tail call void @llvm.amdgcn.global.load.async.to.lds.b32(ptr addrspace(1) null, ptr addrspace(3) null, i32 0, i32 0) + %i14 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) null) + %i15 = bitcast <2 x i32> %i14 to <8 x i8> + %i16 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) null) + %i17 = shufflevector <8 x i8> %i15, <8 x i8> zeroinitializer, <64 x i32> + %i18 = shufflevector <64 x i8> zeroinitializer, <64 x i8> %i17, <64 x i32> + %i19 = insertelement <64 x i8> %i18, i8 0, i64 57 + %i20 = bitcast <64 x i8> %i19 to <16 x i32> + %.extract2214 = extractelement <2 x i32> %i16, i64 0 + %i21 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %i20, i32 0, <16 x i32> %i13, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i22 = extractelement <8 x float> %i21, i64 0 + %i23 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> zeroinitializer, i32 0, <16 x i32> zeroinitializer, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 %.extract2214, i32 0, i32 0, i32 0, i1 false, i1 false) + %i24 = extractelement <8 x float> %i23, i64 0 + %i25 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %arg8, i32 0, <16 x i32> zeroinitializer, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i26 = extractelement <8 x float> %i25, i64 0 + %i27 = fmul float %i22, 0.000000e+00 + %i28 = fmul float %i24, 0.000000e+00 + %i29 = insertelement <2 x float> zeroinitializer, float %i26, i64 1 + %i30 = insertelement <2 x float> zeroinitializer, float %i28, i64 0 + %i31 = insertelement <2 x float> zeroinitializer, float %arg11, i64 0 + %i32 = fadd <2 x float> %i31, %i30 + %i33 = insertelement <2 x float> zeroinitializer, float %arg9, i64 0 + %i34 = fadd <2 x float> %i33, %i32 + %i35 = insertelement <2 x float> zeroinitializer, float %arg7, i64 0 + %i36 = fadd <2 x float> %i35, %i34 + %i37 = insertelement <2 x float> zeroinitializer, float %arg1, i64 0 + %i38 = fadd <2 x float> %i37, %i36 + %i39 = insertelement <2 x float> zeroinitializer, float %arg6, i64 0 + %i40 = fadd <2 x float> %i39, %i38 + %i41 = insertelement <2 x float> zeroinitializer, float %arg4, i64 0 + %i42 = fadd <2 x float> %i41, %i40 + %i43 = insertelement <2 x float> zeroinitializer, float %arg5, i64 0 + %i44 = fadd <2 x float> %i43, %i42 + %i45 = insertelement <2 x float> zeroinitializer, float %arg3, i64 0 + %i46 = fadd <2 x float> %i45, %i44 + %i47 = insertelement <2 x float> zeroinitializer, float %arg, i64 0 + %i48 = insertelement <2 x float> zeroinitializer, float %arg2, i64 0 + %i49 = fadd <2 x float> %i48, %i46 + %i50 = fadd <2 x float> %i29, %i49 + %i51 = fadd <2 x float> %i47, %i50 + %i52 = insertelement <8 x float> zeroinitializer, float %i27, i64 0 + %i53 = tail call <2 x i32> @llvm.amdgcn.cvt.scalef32.pk8.fp8.f32(<8 x float> %i52, float 0.000000e+00) + %i54 = tail call <2 x i32> @llvm.amdgcn.cvt.scalef32.pk8.fp8.f32(<8 x float> splat (float 0x7FF8000000000000), float 0.000000e+00) + %i55 = tail call <2 x i32> @llvm.amdgcn.cvt.scalef32.pk8.fp8.f32(<8 x float> splat (float 1.000000e+00), float 0.000000e+00) + %.extract1415 = extractelement <2 x i32> %i53, i64 0 + %.extract1416 = extractelement <2 x i32> %i54, i64 0 + %.extract1424 = extractelement <2 x i32> %i55, i64 0 + %i56 = tail call i32 @llvm.amdgcn.ds.swizzle(i32 %.extract1416, i32 0) + %i57 = bitcast i32 %.extract1415 to <4 x i8> + %i58 = shufflevector <4 x i8> %i57, <4 x i8> zeroinitializer, <64 x i32> + %i59 = bitcast i32 %i56 to <4 x i8> + %i60 = bitcast i32 %.extract1424 to <4 x i8> + %i61 = shufflevector <4 x i8> %i60, <4 x i8> zeroinitializer, <64 x i32> + %i62 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) null) + %i63 = bitcast <2 x i32> %i62 to <8 x i8> + %i64 = shufflevector <8 x i8> %i63, <8 x i8> zeroinitializer, <64 x i32> + %i65 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) null) + %i66 = bitcast <2 x i32> %i65 to <8 x i8> + %i67 = shufflevector <8 x i8> %i66, <8 x i8> zeroinitializer, <64 x i32> + %i68 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) null) + %i69 = bitcast <2 x i32> %i68 to <8 x i8> + %i70 = shufflevector <8 x i8> %i69, <8 x i8> zeroinitializer, <64 x i32> + %i71 = tail call <2 x i32> @llvm.amdgcn.ds.load.tr8.b64.v2i32(ptr addrspace(3) getelementptr (i8, ptr addrspace(3) null, i32 75232)) + %i72 = shufflevector <64 x i8> zeroinitializer, <64 x i8> %i58, <64 x i32> + %i73 = bitcast <64 x i8> %i72 to <16 x i32> + %i74 = shufflevector <4 x i8> %i59, <4 x i8> zeroinitializer, <64 x i32> + %i75 = shufflevector <64 x i8> %i74, <64 x i8> %i61, <64 x i32> + %i76 = bitcast <64 x i8> %i75 to <16 x i32> + %i77 = shufflevector <64 x i8> zeroinitializer, <64 x i8> %i64, <64 x i32> + %i78 = bitcast <64 x i8> %i77 to <16 x i32> + %i79 = bitcast <64 x i8> %i67 to <16 x i32> + %i80 = shufflevector <64 x i8> zeroinitializer, <64 x i8> %i70, <64 x i32> + %i81 = bitcast <64 x i8> %i80 to <16 x i32> + %.extract1434 = extractelement <2 x i32> %i71, i64 0 + %i82 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %i78, i32 0, <16 x i32> zeroinitializer, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i83 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %arg10, i32 0, <16 x i32> %i73, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i84 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %i79, i32 0, <16 x i32> %i73, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2139062143, i1 false, i1 false) + %i85 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> %i81, i32 0, <16 x i32> %arg8, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2139062143, i1 false, i1 false) + %i86 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> splat (i32 16843009), i32 0, <16 x i32> %arg10, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i87 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> zeroinitializer, i32 0, <16 x i32> zeroinitializer, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) + %i88 = tail call <8 x float> @llvm.amdgcn.wmma.scale.f32.16x16x128.f8f6f4.v8f32.v16i32.v16i32(i32 0, <16 x i32> splat (i32 1), i32 0, <16 x i32> %i76, i16 0, <8 x float> zeroinitializer, i32 0, i32 0, i32 %.extract1434, i32 0, i32 0, i32 0, i1 false, i1 false) + %i89 = fdiv <8 x float> %i82, zeroinitializer + %i90 = fcmp uno <8 x float> %i89, zeroinitializer + %i91 = select <8 x i1> %i90, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i92 = bitcast <8 x bfloat> %i91 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i92, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i93 = fdiv <8 x float> %i83, zeroinitializer + %i94 = fcmp uno <8 x float> %i93, zeroinitializer + %i95 = select <8 x i1> %i94, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i96 = bitcast <8 x bfloat> %i95 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i96, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i97 = fcmp uno <8 x float> %i84, zeroinitializer + %i98 = select <8 x i1> %i97, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i99 = bitcast <8 x bfloat> %i98 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i99, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i100 = fcmp uno <8 x float> %i85, zeroinitializer + %i101 = select <8 x i1> %i100, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i102 = bitcast <8 x bfloat> %i101 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i102, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i103 = fcmp uno <8 x float> %i86, zeroinitializer + %i104 = select <8 x i1> %i103, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i105 = bitcast <8 x bfloat> %i104 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i105, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i106 = fcmp uno <8 x float> %i87, zeroinitializer + %i107 = select <8 x i1> %i106, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i108 = bitcast <8 x bfloat> %i107 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i108, ptr addrspace(8) null, i32 0, i32 0, i32 0) + %i109 = shufflevector <2 x float> %i51, <2 x float> zeroinitializer, <4 x i32> + %i110 = shufflevector <4 x float> %i109, <4 x float> zeroinitializer, <8 x i32> + %i111 = fmul <8 x float> %i88, %i110 + %i112 = fcmp uno <8 x float> %i111, zeroinitializer + %i113 = select <8 x i1> %i112, <8 x bfloat> splat (bfloat 0xR3F80), <8 x bfloat> zeroinitializer + %i114 = bitcast <8 x bfloat> %i113 to <4 x i32> + tail call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %i114, ptr addrspace(8) null, i32 0, i32 0, i32 0) + ret void +} + +attributes #0 = { "amdgpu-flat-work-group-size"="1,128" "amdgpu-waves-per-eu"="1,1" } From 98b170893e955659b9c678c4b8ede08bb11163b2 Mon Sep 17 00:00:00 2001 From: Guray Ozen Date: Wed, 19 Nov 2025 19:33:35 +0100 Subject: [PATCH 02/48] [MLIR][NVVM] Doc fixes (#168716) --- mlir/docs/Dialects/NVVMDialect.md | 7 +------ mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/mlir/docs/Dialects/NVVMDialect.md b/mlir/docs/Dialects/NVVMDialect.md index b50980258593d..12ec2b3fd989e 100644 --- a/mlir/docs/Dialects/NVVMDialect.md +++ b/mlir/docs/Dialects/NVVMDialect.md @@ -1,4 +1,4 @@ -# NVVM Dialect +# 'nvvm' Dialect The NVVM dialect is MLIR's LLVM-IR-based, NVIDIA-specific backend dialect. It models NVVM intrinsics and public ISA functionality and introduces NVIDIA @@ -93,8 +93,3 @@ of an operation is that used in LLVM IR prefixed with "`nvvm.`". [include "Dialects/NVVMOps.md"] - -## Op Interfaces - -[include "Dialects/NVVMRequiresSMTraits.md"] - diff --git a/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt b/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt index c301e0b40e8fe..25b56cc9e5594 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt +++ b/mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt @@ -63,7 +63,7 @@ mlir_tablegen(NVVMRequiresSMTraits.cpp.inc -gen-op-interface-defs) add_mlir_dialect_tablegen_target(MLIRNVVMRequiresSMTraitsIncGen) add_mlir_dialect(NVVMOps nvvm) -add_mlir_doc(NVVMOps NVVMDialect Dialects/ -gen-dialect-doc -dialect=nvvm) +add_mlir_doc(NVVMOps NVVMOps Dialects/ -gen-op-doc) set(LLVM_TARGET_DEFINITIONS NVVMOps.td) mlir_tablegen(NVVMConversions.inc -gen-llvmir-conversions) mlir_tablegen(NVVMFromLLVMIRConversions.inc -gen-intr-from-llvmir-conversions) From 1f3455093c0e0849f52016fccc91b413f85a609a Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Wed, 19 Nov 2025 13:55:14 -0500 Subject: [PATCH 03/48] [gn] port 2675dcd72d02ee1ac (lldb-server PlatformOptions.inc) --- llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn b/llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn index 65517976ff63d..64804c7f707f7 100644 --- a/llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn +++ b/llvm/utils/gn/secondary/lldb/tools/lldb-server/BUILD.gn @@ -6,6 +6,11 @@ tablegen("LLGSOptions") { args = [ "-gen-opt-parser-defs" ] } +tablegen("PlatformOptions") { + visibility = [ ":lldb-server" ] + args = [ "-gen-opt-parser-defs" ] +} + executable("lldb-server") { configs += [ "//llvm/utils/gn/build:clang_code", @@ -13,6 +18,7 @@ executable("lldb-server") { ] deps = [ ":LLGSOptions", + ":PlatformOptions", #"//lldb/include/lldb/Host:Config", "//lldb/source/Host", From bc5f3d2063e740262a873f223b86ffda39dfa7a6 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Wed, 19 Nov 2025 14:00:41 -0500 Subject: [PATCH 04/48] [gn] port 0ae2bccde45 (arm SDNodeInfo) --- llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn index 84f079a211cd4..64a5633b847e3 100644 --- a/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn @@ -36,6 +36,12 @@ tablegen("ARMGenRegisterBank") { td_file = "ARM.td" } +tablegen("ARMGenSDNodeInfo") { + visibility = [ ":LLVMARMCodeGen" ] + args = [ "-gen-sd-node-info" ] + td_file = "ARM.td" +} + static_library("LLVMARMCodeGen") { deps = [ ":ARMGenCallingConv", @@ -44,6 +50,7 @@ static_library("LLVMARMCodeGen") { ":ARMGenGlobalISel", ":ARMGenMCPseudoLowering", ":ARMGenRegisterBank", + ":ARMGenSDNodeInfo", "MCTargetDesc", "TargetInfo", "Utils", From 3adcfd22ecc2f2a8fbd32e0d1533fc22111ed7cb Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Wed, 19 Nov 2025 14:04:09 -0500 Subject: [PATCH 05/48] [gn] port e47e9f3b7b136 (nvptx SDNodeInfo) --- llvm/utils/gn/secondary/llvm/lib/Target/NVPTX/BUILD.gn | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/NVPTX/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/NVPTX/BUILD.gn index 0ec70162c71f5..7b0db8863c6f0 100644 --- a/llvm/utils/gn/secondary/llvm/lib/Target/NVPTX/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/lib/Target/NVPTX/BUILD.gn @@ -6,9 +6,16 @@ tablegen("NVPTXGenDAGISel") { td_file = "NVPTX.td" } +tablegen("NVPTXGenSDNodeInfo") { + visibility = [ ":LLVMNVPTXCodeGen" ] + args = [ "-gen-sd-node-info" ] + td_file = "NVPTX.td" +} + static_library("LLVMNVPTXCodeGen") { deps = [ ":NVPTXGenDAGISel", + ":NVPTXGenSDNodeInfo", "MCTargetDesc", "TargetInfo", "//llvm/include/llvm/Config:llvm-config", From d2c7c6064259320def7a74e111079725958697d4 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Wed, 19 Nov 2025 10:46:50 -0800 Subject: [PATCH 06/48] [InstSimplify] Add whitespace to struct declarations in vector-calls.ll. NFC This matches how IR is printed. --- .../InstSimplify/ConstProp/vector-calls.ll | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll b/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll index 848f0d17ff373..fcae336f48b77 100644 --- a/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll +++ b/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll @@ -99,34 +99,34 @@ define <32 x i32> @fold_vector_interleave8() { ret <32 x i32> %1 } -define {<4 x i32>, <4 x i32>} @fold_vector_deinterleave2() { +define { <4 x i32>, <4 x i32> } @fold_vector_deinterleave2() { ; CHECK-LABEL: define { <4 x i32>, <4 x i32> } @fold_vector_deinterleave2() { ; CHECK-NEXT: ret { <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> } ; - %1 = call {<4 x i32>, <4 x i32>} @llvm.vector.deinterleave2.v4i32.v8i32(<8 x i32> ) - ret {<4 x i32>, <4 x i32>} %1 + %1 = call { <4 x i32>, <4 x i32> } @llvm.vector.deinterleave2.v4i32.v8i32(<8 x i32> ) + ret { <4 x i32>, <4 x i32> } %1 } -define {, } @fold_scalable_vector_deinterleave2() { +define { , } @fold_scalable_vector_deinterleave2() { ; CHECK-LABEL: define { , } @fold_scalable_vector_deinterleave2() { ; CHECK-NEXT: ret { , } zeroinitializer ; - %1 = call {, } @llvm.vector.deinterleave2.v4i32.v8i32( zeroinitializer) - ret {, } %1 + %1 = call { , } @llvm.vector.deinterleave2.v4i32.v8i32( zeroinitializer) + ret { , } %1 } -define {, } @fold_scalable_vector_deinterleave2_splat() { +define { , } @fold_scalable_vector_deinterleave2_splat() { ; CHECK-LABEL: define { , } @fold_scalable_vector_deinterleave2_splat() { ; CHECK-NEXT: ret { , } { splat (i32 1), splat (i32 1) } ; - %1 = call {, } @llvm.vector.deinterleave2.v4i32.v8i32( splat (i32 1)) - ret {, } %1 + %1 = call { , } @llvm.vector.deinterleave2.v4i32.v8i32( splat (i32 1)) + ret { , } %1 } -define {, } @fold_scalable_vector_deinterleave2_splatfp() { +define { , } @fold_scalable_vector_deinterleave2_splatfp() { ; CHECK-LABEL: define { , } @fold_scalable_vector_deinterleave2_splatfp() { ; CHECK-NEXT: ret { , } { splat (float 1.000000e+00), splat (float 1.000000e+00) } ; - %1 = call {, } @llvm.vector.deinterleave2.v4f32.v8f32( splat (float 1.0)) - ret {, } %1 + %1 = call { , } @llvm.vector.deinterleave2.v4f32.v8f32( splat (float 1.0)) + ret { , } %1 } From 1233c4bf230bcc40f86b8684e4cc1e4d368a8b79 Mon Sep 17 00:00:00 2001 From: Walter Lee <49250218+googlewalt@users.noreply.github.com> Date: Wed, 19 Nov 2025 19:14:42 +0000 Subject: [PATCH 07/48] Minor fix of reproducer in #165572 (#168751) --- clang/test/Driver/crash-ir-repro.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clang/test/Driver/crash-ir-repro.cpp b/clang/test/Driver/crash-ir-repro.cpp index 1f31a5ca1bb34..fd97e6f0cce11 100644 --- a/clang/test/Driver/crash-ir-repro.cpp +++ b/clang/test/Driver/crash-ir-repro.cpp @@ -1,9 +1,8 @@ // RUN: %clang -S -emit-llvm -o %t.ll %s -// RUN: not %clang -S -DCRASH %s %t.ll 2>&1 | FileCheck %s +// RUN: not %clang -S -DCRASH %s -o %t.ll 2>&1 | FileCheck %s // CHECK: Preprocessed source(s) and associated run script(s) are located at: // CHECK-NEXT: clang: note: diagnostic msg: {{.*}}.cpp -// CHECK-NEXT: clang: note: diagnostic msg: {{.*}}.ll // CHECK-NEXT: clang: note: diagnostic msg: {{.*}}.sh #ifdef CRASH From a757c4e74e6a3130c708b26903d5117a9279bef8 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Wed, 19 Nov 2025 14:18:13 -0500 Subject: [PATCH 08/48] CodeGen: Add subtarget to TargetLoweringBase constructor (#168620) Currently LibcallLoweringInfo is defined inside of TargetLowering, which is owned by the subtarget. Pass in the subtarget so we can construct LibcallLoweringInfo with the subtarget. This is a temporary step that should be revertable in the future, after LibcallLoweringInfo is moved out of TargetLowering. --- llvm/include/llvm/CodeGen/TargetLowering.h | 6 ++-- .../CodeGen/SelectionDAG/TargetLowering.cpp | 5 ++-- llvm/lib/CodeGen/TargetLoweringBase.cpp | 3 +- .../Target/AArch64/AArch64ISelLowering.cpp | 2 +- llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp | 5 ++-- llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h | 3 +- llvm/lib/Target/AMDGPU/R600ISelLowering.cpp | 3 +- llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 2 +- llvm/lib/Target/ARM/ARMISelLowering.cpp | 2 +- llvm/lib/Target/AVR/AVRISelLowering.cpp | 2 +- llvm/lib/Target/BPF/BPFISelLowering.cpp | 2 +- .../Target/DirectX/DirectXTargetMachine.cpp | 2 +- .../Target/Hexagon/HexagonISelLowering.cpp | 4 +-- llvm/lib/Target/Lanai/LanaiISelLowering.cpp | 2 +- .../LoongArch/LoongArchISelLowering.cpp | 2 +- llvm/lib/Target/MSP430/MSP430ISelLowering.cpp | 2 +- llvm/lib/Target/Mips/MipsISelLowering.cpp | 2 +- llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp | 2 +- llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 2 +- llvm/lib/Target/RISCV/RISCVISelLowering.cpp | 2 +- llvm/lib/Target/SPIRV/SPIRVISelLowering.cpp | 4 +++ llvm/lib/Target/SPIRV/SPIRVISelLowering.h | 3 +- llvm/lib/Target/Sparc/SparcISelLowering.cpp | 2 +- .../Target/SystemZ/SystemZISelLowering.cpp | 2 +- llvm/lib/Target/VE/VEISelLowering.cpp | 2 +- .../WebAssembly/WebAssemblyISelLowering.cpp | 2 +- llvm/lib/Target/X86/X86ISelLowering.cpp | 2 +- llvm/lib/Target/XCore/XCoreISelLowering.cpp | 2 +- llvm/lib/Target/Xtensa/XtensaISelLowering.cpp | 2 +- llvm/unittests/CodeGen/MFCommon.inc | 5 ++-- .../AArch64/AArch64SelectionDAGTest.cpp | 30 ++++++++++--------- 31 files changed, 62 insertions(+), 49 deletions(-) diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h index 4c932c523e423..7df5d8a09f0f6 100644 --- a/llvm/include/llvm/CodeGen/TargetLowering.h +++ b/llvm/include/llvm/CodeGen/TargetLowering.h @@ -355,7 +355,8 @@ class LLVM_ABI TargetLoweringBase { llvm_unreachable("Invalid content kind"); } - explicit TargetLoweringBase(const TargetMachine &TM); + explicit TargetLoweringBase(const TargetMachine &TM, + const TargetSubtargetInfo &STI); TargetLoweringBase(const TargetLoweringBase &) = delete; TargetLoweringBase &operator=(const TargetLoweringBase &) = delete; virtual ~TargetLoweringBase(); @@ -3977,7 +3978,8 @@ class LLVM_ABI TargetLowering : public TargetLoweringBase { TargetLowering(const TargetLowering &) = delete; TargetLowering &operator=(const TargetLowering &) = delete; - explicit TargetLowering(const TargetMachine &TM); + explicit TargetLowering(const TargetMachine &TM, + const TargetSubtargetInfo &STI); ~TargetLowering() override; bool isPositionIndependent() const; diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp index bb64f4ee70280..5684e0e4c26c4 100644 --- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp @@ -41,8 +41,9 @@ using namespace llvm; using namespace llvm::SDPatternMatch; /// NOTE: The TargetMachine owns TLOF. -TargetLowering::TargetLowering(const TargetMachine &tm) - : TargetLoweringBase(tm) {} +TargetLowering::TargetLowering(const TargetMachine &tm, + const TargetSubtargetInfo &STI) + : TargetLoweringBase(tm, STI) {} // Define the virtual destructor out-of-line for build efficiency. TargetLowering::~TargetLowering() = default; diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp index 0562fd8c08ba8..f9d727eaf1e20 100644 --- a/llvm/lib/CodeGen/TargetLoweringBase.cpp +++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp @@ -749,7 +749,8 @@ ISD::CondCode TargetLoweringBase::getSoftFloatCmpLibcallPredicate( } /// NOTE: The TargetMachine owns TLOF. -TargetLoweringBase::TargetLoweringBase(const TargetMachine &tm) +TargetLoweringBase::TargetLoweringBase(const TargetMachine &tm, + const TargetSubtargetInfo &STI) : TM(tm), RuntimeLibcallInfo(TM.getTargetTriple(), TM.Options.ExceptionModel, TM.Options.FloatABIType, TM.Options.EABIVersion, diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp index 8f41f230b5521..2fc8b0c9a22cd 100644 --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -387,7 +387,7 @@ extractPtrauthBlendDiscriminators(SDValue Disc, SelectionDAG *DAG) { AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM, const AArch64Subtarget &STI) - : TargetLowering(TM), Subtarget(&STI) { + : TargetLowering(TM, STI), Subtarget(&STI) { // AArch64 doesn't have comparisons which set GPRs or setcc instructions, so // we have to make something up. Arbitrarily, choose ZeroOrOne. setBooleanContents(ZeroOrOneBooleanContent); diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp index db890df7c50f9..19b3ae5e695c7 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp @@ -60,8 +60,9 @@ unsigned AMDGPUTargetLowering::numBitsSigned(SDValue Op, SelectionDAG &DAG) { } AMDGPUTargetLowering::AMDGPUTargetLowering(const TargetMachine &TM, - const AMDGPUSubtarget &STI) - : TargetLowering(TM), Subtarget(&STI) { + const TargetSubtargetInfo &STI, + const AMDGPUSubtarget &AMDGPUSTI) + : TargetLowering(TM, STI), Subtarget(&AMDGPUSTI) { // Always lower memset, memcpy, and memmove intrinsics to load/store // instructions, rather then generating calls to memset, mempcy or memmove. MaxStoresPerMemset = MaxStoresPerMemsetOptSize = ~0U; diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h index 473975133f5b3..9c0eff99981cd 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h @@ -180,7 +180,8 @@ class AMDGPUTargetLowering : public TargetLowering { const SmallVectorImpl &Ins) const; public: - AMDGPUTargetLowering(const TargetMachine &TM, const AMDGPUSubtarget &STI); + AMDGPUTargetLowering(const TargetMachine &TM, const TargetSubtargetInfo &STI, + const AMDGPUSubtarget &AMDGPUSTI); bool mayIgnoreSignedZero(SDValue Op) const; diff --git a/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp b/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp index c799c7f63e105..950a9d8649c93 100644 --- a/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp @@ -30,7 +30,8 @@ using namespace llvm; R600TargetLowering::R600TargetLowering(const TargetMachine &TM, const R600Subtarget &STI) - : AMDGPUTargetLowering(TM, STI), Subtarget(&STI), Gen(STI.getGeneration()) { + : AMDGPUTargetLowering(TM, STI, STI), Subtarget(&STI), + Gen(STI.getGeneration()) { addRegisterClass(MVT::f32, &R600::R600_Reg32RegClass); addRegisterClass(MVT::i32, &R600::R600_Reg32RegClass); addRegisterClass(MVT::v2f32, &R600::R600_Reg64RegClass); diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index e37d739fc25df..1e0f0e5173690 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -87,7 +87,7 @@ static unsigned findFirstFreeSGPR(CCState &CCInfo) { SITargetLowering::SITargetLowering(const TargetMachine &TM, const GCNSubtarget &STI) - : AMDGPUTargetLowering(TM, STI), Subtarget(&STI) { + : AMDGPUTargetLowering(TM, STI, STI), Subtarget(&STI) { addRegisterClass(MVT::i1, &AMDGPU::VReg_1RegClass); addRegisterClass(MVT::i64, &AMDGPU::SReg_64RegClass); diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index cd8d7a0bee5e3..2ad8f877ff11b 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -508,7 +508,7 @@ const ARMBaseTargetMachine &ARMTargetLowering::getTM() const { ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_, const ARMSubtarget &STI) - : TargetLowering(TM_), Subtarget(&STI), + : TargetLowering(TM_, STI), Subtarget(&STI), RegInfo(Subtarget->getRegisterInfo()), Itins(Subtarget->getInstrItineraryData()) { const auto &TM = static_cast(TM_); diff --git a/llvm/lib/Target/AVR/AVRISelLowering.cpp b/llvm/lib/Target/AVR/AVRISelLowering.cpp index 545bc3af05383..054ff989d54b8 100644 --- a/llvm/lib/Target/AVR/AVRISelLowering.cpp +++ b/llvm/lib/Target/AVR/AVRISelLowering.cpp @@ -34,7 +34,7 @@ namespace llvm { AVRTargetLowering::AVRTargetLowering(const AVRTargetMachine &TM, const AVRSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { // Set up the register classes. addRegisterClass(MVT::i8, &AVR::GPR8RegClass); addRegisterClass(MVT::i16, &AVR::DREGSRegClass); diff --git a/llvm/lib/Target/BPF/BPFISelLowering.cpp b/llvm/lib/Target/BPF/BPFISelLowering.cpp index ecefd2379356a..a8d1faa85116b 100644 --- a/llvm/lib/Target/BPF/BPFISelLowering.cpp +++ b/llvm/lib/Target/BPF/BPFISelLowering.cpp @@ -58,7 +58,7 @@ static void fail(const SDLoc &DL, SelectionDAG &DAG, const Twine &Msg, BPFTargetLowering::BPFTargetLowering(const TargetMachine &TM, const BPFSubtarget &STI) - : TargetLowering(TM) { + : TargetLowering(TM, STI) { // Set up the register classes. addRegisterClass(MVT::i64, &BPF::GPRRegClass); diff --git a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp index f0c5f523a003c..fae9cbf9832fe 100644 --- a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp +++ b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp @@ -206,7 +206,7 @@ DirectXTargetMachine::getTargetTransformInfo(const Function &F) const { DirectXTargetLowering::DirectXTargetLowering(const DirectXTargetMachine &TM, const DirectXSubtarget &STI) - : TargetLowering(TM) { + : TargetLowering(TM, STI) { addRegisterClass(MVT::i32, &dxil::DXILClassRegClass); computeRegisterProperties(STI.getRegisterInfo()); } diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp index 8d325a58dc9a7..5767a74513e8d 100644 --- a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp @@ -1504,8 +1504,8 @@ HexagonTargetLowering::LowerGlobalTLSAddress(SDValue Op, HexagonTargetLowering::HexagonTargetLowering(const TargetMachine &TM, const HexagonSubtarget &ST) - : TargetLowering(TM), HTM(static_cast(TM)), - Subtarget(ST) { + : TargetLowering(TM, ST), + HTM(static_cast(TM)), Subtarget(ST) { auto &HRI = *Subtarget.getRegisterInfo(); setPrefLoopAlignment(Align(16)); diff --git a/llvm/lib/Target/Lanai/LanaiISelLowering.cpp b/llvm/lib/Target/Lanai/LanaiISelLowering.cpp index f412f66d9d192..631a8de035ac2 100644 --- a/llvm/lib/Target/Lanai/LanaiISelLowering.cpp +++ b/llvm/lib/Target/Lanai/LanaiISelLowering.cpp @@ -70,7 +70,7 @@ static cl::opt LanaiLowerConstantMulThreshold( LanaiTargetLowering::LanaiTargetLowering(const TargetMachine &TM, const LanaiSubtarget &STI) - : TargetLowering(TM) { + : TargetLowering(TM, STI) { // Set up the register classes. addRegisterClass(MVT::i32, &Lanai::GPRRegClass); diff --git a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp index cf4ffc82f6009..83d841dba33e3 100644 --- a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp +++ b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp @@ -76,7 +76,7 @@ static cl::opt ZeroDivCheck("loongarch-check-zero-division", cl::Hidden, LoongArchTargetLowering::LoongArchTargetLowering(const TargetMachine &TM, const LoongArchSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { MVT GRLenVT = Subtarget.getGRLenVT(); diff --git a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp index 5653099431b18..89f38c847b1eb 100644 --- a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp +++ b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp @@ -42,7 +42,7 @@ static cl::optMSP430NoLegalImmediate( MSP430TargetLowering::MSP430TargetLowering(const TargetMachine &TM, const MSP430Subtarget &STI) - : TargetLowering(TM) { + : TargetLowering(TM, STI) { // Set up the register classes. addRegisterClass(MVT::i8, &MSP430::GR8RegClass); diff --git a/llvm/lib/Target/Mips/MipsISelLowering.cpp b/llvm/lib/Target/Mips/MipsISelLowering.cpp index 2fd73275721b1..b52aa3ce67950 100644 --- a/llvm/lib/Target/Mips/MipsISelLowering.cpp +++ b/llvm/lib/Target/Mips/MipsISelLowering.cpp @@ -295,7 +295,7 @@ const char *MipsTargetLowering::getTargetNodeName(unsigned Opcode) const { MipsTargetLowering::MipsTargetLowering(const MipsTargetMachine &TM, const MipsSubtarget &STI) - : TargetLowering(TM), Subtarget(STI), ABI(TM.getABI()) { + : TargetLowering(TM, STI), Subtarget(STI), ABI(TM.getABI()) { // Mips does not have i1 type, so use i32 for // setcc operations results (slt, sgt, ...). setBooleanContents(ZeroOrOneBooleanContent); diff --git a/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp b/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp index 8fc3a68de6c79..a77eb0240e677 100644 --- a/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp @@ -514,7 +514,7 @@ VectorizePTXValueVTs(const SmallVectorImpl &ValueVTs, // NVPTXTargetLowering Constructor. NVPTXTargetLowering::NVPTXTargetLowering(const NVPTXTargetMachine &TM, const NVPTXSubtarget &STI) - : TargetLowering(TM), nvTM(&TM), STI(STI), GlobalUniqueCallSite(0) { + : TargetLowering(TM, STI), nvTM(&TM), STI(STI), GlobalUniqueCallSite(0) { // always lower memset, memcpy, and memmove intrinsics to load/store // instructions, rather // then generating calls to memset, mempcy or memmove. diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 342532c2e52d2..e58c06bbd4d47 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -174,7 +174,7 @@ extern cl::opt ANDIGlueBug; PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM, const PPCSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { // Initialize map that relates the PPC addressing modes to the computed flags // of a load/store instruction. The map is used to determine the optimal // addressing mode when selecting load and stores. diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp index 2d6bb06d689c3..3d6d4f6654d17 100644 --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -95,7 +95,7 @@ static const unsigned ZvfbfaOps[] = {ISD::FNEG, ISD::FABS, ISD::FCOPYSIGN, RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM, const RISCVSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { RISCVABI::ABI ABI = Subtarget.getTargetABI(); assert(ABI != RISCVABI::ABI_Unknown && "Improperly initialised target ABI"); diff --git a/llvm/lib/Target/SPIRV/SPIRVISelLowering.cpp b/llvm/lib/Target/SPIRV/SPIRVISelLowering.cpp index cba9d45072852..0ba6589c68944 100644 --- a/llvm/lib/Target/SPIRV/SPIRVISelLowering.cpp +++ b/llvm/lib/Target/SPIRV/SPIRVISelLowering.cpp @@ -24,6 +24,10 @@ using namespace llvm; +SPIRVTargetLowering::SPIRVTargetLowering(const TargetMachine &TM, + const SPIRVSubtarget &ST) + : TargetLowering(TM, ST), STI(ST) {} + // Returns true of the types logically match, as defined in // https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#OpCopyLogical. static bool typesLogicallyMatch(const SPIRVType *Ty1, const SPIRVType *Ty2, diff --git a/llvm/lib/Target/SPIRV/SPIRVISelLowering.h b/llvm/lib/Target/SPIRV/SPIRVISelLowering.h index 9025e6eb0842e..3d31a116bad4a 100644 --- a/llvm/lib/Target/SPIRV/SPIRVISelLowering.h +++ b/llvm/lib/Target/SPIRV/SPIRVISelLowering.h @@ -29,8 +29,7 @@ class SPIRVTargetLowering : public TargetLowering { public: explicit SPIRVTargetLowering(const TargetMachine &TM, - const SPIRVSubtarget &ST) - : TargetLowering(TM), STI(ST) {} + const SPIRVSubtarget &ST); // Stop IRTranslator breaking up FMA instrs to preserve types information. bool isFMAFasterThanFMulAndFAdd(const MachineFunction &MF, diff --git a/llvm/lib/Target/Sparc/SparcISelLowering.cpp b/llvm/lib/Target/Sparc/SparcISelLowering.cpp index ae3c32687c207..dc1196127e3d4 100644 --- a/llvm/lib/Target/Sparc/SparcISelLowering.cpp +++ b/llvm/lib/Target/Sparc/SparcISelLowering.cpp @@ -1573,7 +1573,7 @@ static SPCC::CondCodes FPCondCCodeToFCC(ISD::CondCode CC) { SparcTargetLowering::SparcTargetLowering(const TargetMachine &TM, const SparcSubtarget &STI) - : TargetLowering(TM), Subtarget(&STI) { + : TargetLowering(TM, STI), Subtarget(&STI) { MVT PtrVT = MVT::getIntegerVT(TM.getPointerSizeInBits(0)); // Instructions which use registers as conditionals examine all the diff --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp index dfd76f9b0427f..06501b745b3f7 100644 --- a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp +++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp @@ -92,7 +92,7 @@ static MachineOperand earlyUseOperand(MachineOperand Op) { SystemZTargetLowering::SystemZTargetLowering(const TargetMachine &TM, const SystemZSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { MVT PtrVT = MVT::getIntegerVT(TM.getPointerSizeInBits(0)); auto *Regs = STI.getSpecialRegisters(); diff --git a/llvm/lib/Target/VE/VEISelLowering.cpp b/llvm/lib/Target/VE/VEISelLowering.cpp index e1735424a776b..a64193236f2ad 100644 --- a/llvm/lib/Target/VE/VEISelLowering.cpp +++ b/llvm/lib/Target/VE/VEISelLowering.cpp @@ -886,7 +886,7 @@ bool VETargetLowering::allowsMisalignedMemoryAccesses(EVT VT, VETargetLowering::VETargetLowering(const TargetMachine &TM, const VESubtarget &STI) - : TargetLowering(TM), Subtarget(&STI) { + : TargetLowering(TM, STI), Subtarget(&STI) { // Instructions which use registers as conditionals examine all the // bits (as does the pseudo SELECT_CC expansion). I don't think it // matters much whether it's ZeroOrOneBooleanContent, or diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp index ad70d1b7e0a1e..abd8b2e095ae1 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp @@ -43,7 +43,7 @@ using namespace llvm; WebAssemblyTargetLowering::WebAssemblyTargetLowering( const TargetMachine &TM, const WebAssemblySubtarget &STI) - : TargetLowering(TM), Subtarget(&STI) { + : TargetLowering(TM, STI), Subtarget(&STI) { auto MVTPtr = Subtarget->hasAddr64() ? MVT::i64 : MVT::i32; // Set the load count for memcmp expand optimization diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index aa9ba6b0e197c..3fc41e5b0bc1c 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -130,7 +130,7 @@ static cl::opt MulConstantOptimization( X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM, const X86Subtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { bool UseX87 = !Subtarget.useSoftFloat() && Subtarget.hasX87(); MVT PtrVT = MVT::getIntegerVT(TM.getPointerSizeInBits(0)); diff --git a/llvm/lib/Target/XCore/XCoreISelLowering.cpp b/llvm/lib/Target/XCore/XCoreISelLowering.cpp index 0a96ab236c6ad..7c49e5b620bdf 100644 --- a/llvm/lib/Target/XCore/XCoreISelLowering.cpp +++ b/llvm/lib/Target/XCore/XCoreISelLowering.cpp @@ -42,7 +42,7 @@ using namespace llvm; XCoreTargetLowering::XCoreTargetLowering(const TargetMachine &TM, const XCoreSubtarget &Subtarget) - : TargetLowering(TM), TM(TM), Subtarget(Subtarget) { + : TargetLowering(TM, Subtarget), TM(TM), Subtarget(Subtarget) { // Set up the register classes. addRegisterClass(MVT::i32, &XCore::GRRegsRegClass); diff --git a/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp b/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp index 71c98621c81ee..a9cf67128cdef 100644 --- a/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp +++ b/llvm/lib/Target/Xtensa/XtensaISelLowering.cpp @@ -54,7 +54,7 @@ static unsigned toCallerWindow(unsigned Reg) { XtensaTargetLowering::XtensaTargetLowering(const TargetMachine &TM, const XtensaSubtarget &STI) - : TargetLowering(TM), Subtarget(STI) { + : TargetLowering(TM, STI), Subtarget(STI) { MVT PtrVT = MVT::i32; // Set up the register classes. addRegisterClass(MVT::i32, &Xtensa::ARRegClass); diff --git a/llvm/unittests/CodeGen/MFCommon.inc b/llvm/unittests/CodeGen/MFCommon.inc index 3ea51de751fad..c5e1c747bce32 100644 --- a/llvm/unittests/CodeGen/MFCommon.inc +++ b/llvm/unittests/CodeGen/MFCommon.inc @@ -2,7 +2,8 @@ // depending on a real target. class BogusTargetLowering : public TargetLowering { public: - BogusTargetLowering(TargetMachine &TM) : TargetLowering(TM) {} + BogusTargetLowering(const TargetMachine &TM, const TargetSubtargetInfo &STI) + : TargetLowering(TM, STI) {} }; class BogusFrameLowering : public TargetFrameLowering { @@ -87,7 +88,7 @@ public: BogusSubtarget(TargetMachine &TM) : TargetSubtargetInfo(Triple(""), "", "", "", {}, {}, {}, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr), - FL(), TL(TM) {} + FL(), TL(TM, *this) {} ~BogusSubtarget() override = default; const TargetFrameLowering *getFrameLowering() const override { return &FL; } diff --git a/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp b/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp index 809960d368e4e..14e1efaf65c8f 100644 --- a/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp +++ b/llvm/unittests/Target/AArch64/AArch64SelectionDAGTest.cpp @@ -25,6 +25,8 @@ namespace llvm { class AArch64SelectionDAGTest : public testing::Test { protected: + const TargetSubtargetInfo *STI; + static void SetUpTestCase() { LLVMInitializeAArch64TargetInfo(); LLVMInitializeAArch64Target(); @@ -55,8 +57,8 @@ class AArch64SelectionDAGTest : public testing::Test { MachineModuleInfo MMI(TM.get()); - MF = std::make_unique(*F, *TM, *TM->getSubtargetImpl(*F), - MMI.getContext(), 0); + STI = TM->getSubtargetImpl(*F); + MF = std::make_unique(*F, *TM, *STI, MMI.getContext(), 0); DAG = std::make_unique(*TM, CodeGenOptLevel::None); if (!DAG) @@ -337,7 +339,7 @@ TEST_F(AArch64SelectionDAGTest, ComputeNumSignBits_ADDC) { } TEST_F(AArch64SelectionDAGTest, SimplifyDemandedVectorElts_EXTRACT_SUBVECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -356,7 +358,7 @@ TEST_F(AArch64SelectionDAGTest, SimplifyDemandedVectorElts_EXTRACT_SUBVECTOR) { } TEST_F(AArch64SelectionDAGTest, SimplifyDemandedBitsNEON) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto Int8VT = EVT::getIntegerVT(Context, 8); @@ -382,7 +384,7 @@ TEST_F(AArch64SelectionDAGTest, SimplifyDemandedBitsNEON) { } TEST_F(AArch64SelectionDAGTest, SimplifyDemandedBitsSVE) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto Int8VT = EVT::getIntegerVT(Context, 8); @@ -784,7 +786,7 @@ TEST_F(AArch64SelectionDAGTest, ComputeKnownBits_VSHL) { } TEST_F(AArch64SelectionDAGTest, isSplatValue_Fixed_BUILD_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -804,7 +806,7 @@ TEST_F(AArch64SelectionDAGTest, isSplatValue_Fixed_BUILD_VECTOR) { } TEST_F(AArch64SelectionDAGTest, isSplatValue_Fixed_ADD_of_BUILD_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -828,7 +830,7 @@ TEST_F(AArch64SelectionDAGTest, isSplatValue_Fixed_ADD_of_BUILD_VECTOR) { } TEST_F(AArch64SelectionDAGTest, isSplatValue_Scalable_SPLAT_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -844,7 +846,7 @@ TEST_F(AArch64SelectionDAGTest, isSplatValue_Scalable_SPLAT_VECTOR) { } TEST_F(AArch64SelectionDAGTest, isSplatValue_Scalable_ADD_of_SPLAT_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -864,7 +866,7 @@ TEST_F(AArch64SelectionDAGTest, isSplatValue_Scalable_ADD_of_SPLAT_VECTOR) { } TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Fixed_BUILD_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -880,7 +882,7 @@ TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Fixed_BUILD_VECTOR) { TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Fixed_ADD_of_BUILD_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -898,7 +900,7 @@ TEST_F(AArch64SelectionDAGTest, } TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Scalable_SPLAT_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -914,7 +916,7 @@ TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Scalable_SPLAT_VECTOR) { TEST_F(AArch64SelectionDAGTest, getSplatSourceVector_Scalable_ADD_of_SPLAT_VECTOR) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; auto IntVT = EVT::getIntegerVT(Context, 8); @@ -932,7 +934,7 @@ TEST_F(AArch64SelectionDAGTest, } TEST_F(AArch64SelectionDAGTest, getRepeatedSequence_Patterns) { - TargetLowering TL(*TM); + TargetLowering TL(*TM, *STI); SDLoc Loc; unsigned NumElts = 16; From 36f9d5a41f0eff44e65f09240c7ca454c47b35cd Mon Sep 17 00:00:00 2001 From: Paddy McDonald Date: Wed, 19 Nov 2025 11:20:10 -0800 Subject: [PATCH 09/48] [ASan] Document define to disable container overflow checks at compile time. (#163468) Document a define to allow library developers to support disabling AddressSanitizer's container overflow detection in template code at compile time. The primary motivation is to reduce false positives in environments where libraries and frameworks that cannot be recompiled with sanitizers enabled are called from application code. This supports disabling checks when the runtime environment cannot be reliably controlled to use ASAN_OPTIONS. Key changes: - Use the define `__SANITIZER_DISABLE_CONTAINER_OVERFLOW__` to disable instrumentation at compile time - Implemented redefining the container overflow APIs in common_interface_defs.h to use define to provide null implementation when define is present - Update documentation in AddressSanitizer.rst to suggest and illustrate use of the define - Add details of the define in PrintContainerOverflowHint() - Add test disable_container_overflow_checks to verify new hints on the error and fill the testing gap that ASAN_OPTIONS=detect_container_overflow=0 works - Add tests demonstrating the issue around closed source libraries and instrumented apps that both modify containers This requires no compiler changes and should be supportable cross compiler toolchains. An RFC has been opened to discuss: https://discourse.llvm.org/t/rfc-add-fsanitize-address-disable-container-overflow-flag-to-addresssanitizer/88349 --- clang/docs/AddressSanitizer.rst | 52 ++++++++ .../include/sanitizer/common_interface_defs.h | 52 ++++++++ compiler-rt/lib/asan/asan_errors.cpp | 14 ++- .../disable_container_overflow_checks.cpp | 50 ++++++++ .../TestCases/stack_container_dynamic_lib.cpp | 118 ++++++++++++++++++ 5 files changed, 281 insertions(+), 5 deletions(-) create mode 100644 compiler-rt/test/asan/TestCases/disable_container_overflow_checks.cpp create mode 100644 compiler-rt/test/asan/TestCases/stack_container_dynamic_lib.cpp diff --git a/clang/docs/AddressSanitizer.rst b/clang/docs/AddressSanitizer.rst index 2c2131b01d361..ed59afa1e0af5 100644 --- a/clang/docs/AddressSanitizer.rst +++ b/clang/docs/AddressSanitizer.rst @@ -164,6 +164,18 @@ To summarize: ``-fsanitize-address-use-after-return=`` * ``always``: Enables detection of UAR errors in all cases. (reduces code size, but not as much as ``never``). +Container Overflow Detection +---------------------------- + +AddressSanitizer can detect overflows in containers with custom allocators +(such as std::vector) where the library developers have added calls into the +AddressSanitizer runtime to indicate which memory is poisoned etc. + +In environments where not all the process binaries can be recompiled with +AddressSanitizer enabled, these checks can cause false positives. + +See `Disabling container overflow checks`_ for details on suppressing checks. + Memory leak detection --------------------- @@ -242,6 +254,46 @@ AddressSanitizer also supports works similarly to ``__attribute__((no_sanitize("address")))``, but it also prevents instrumentation performed by other sanitizers. +Disabling container overflow checks +----------------------------------- + +Runtime suppression +^^^^^^^^^^^^^^^^^^^ + +Container overflow checks can be disabled at runtime using the +``ASAN_OPTIONS=detect_container_overflow=0`` environment variable. + +Compile time suppression +^^^^^^^^^^^^^^^^^^^^^^^^ + +``-D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__`` can be used at compile time to +disable container overflow checks if the container library has added support +for this define. + +To support a standard way to disable container overflow checks at compile time, +library developers should use this definition in conjunction with the +AddressSanitizer feature test to conditionally include container overflow +related code compiled into user code: + +The recommended form is + +.. code-block:: c + + // include the sanitizer common interfaces + #include + + #if __has_feature(address_sanitizer) + // Container overflow detection enabled - include annotations + __sanitizer_annotate_contiguous_container(beg, end, old_mid, new_mid); + #endif + +This pattern ensures that: + +* Container overflow annotations are only included when AddressSanitizer is + enabled +* Container overflow detection can be disabled by passing + ``-D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__`` to the compiler + Suppressing Errors in Recompiled Code (Ignorelist) -------------------------------------------------- diff --git a/compiler-rt/include/sanitizer/common_interface_defs.h b/compiler-rt/include/sanitizer/common_interface_defs.h index 57313f9bc80e6..51104093758cd 100644 --- a/compiler-rt/include/sanitizer/common_interface_defs.h +++ b/compiler-rt/include/sanitizer/common_interface_defs.h @@ -156,8 +156,15 @@ int SANITIZER_CDECL __sanitizer_acquire_crash_state(); /// \param end End of memory region. /// \param old_mid Old middle of memory region. /// \param new_mid New middle of memory region. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline void SANITIZER_CDECL +__sanitizer_annotate_contiguous_container(const void *beg, const void *end, + const void *old_mid, + const void *new_mid) {} +#else void SANITIZER_CDECL __sanitizer_annotate_contiguous_container( const void *beg, const void *end, const void *old_mid, const void *new_mid); +#endif /// Similar to __sanitizer_annotate_contiguous_container. /// @@ -188,10 +195,18 @@ void SANITIZER_CDECL __sanitizer_annotate_contiguous_container( /// \param old_container_end End of used region. /// \param new_container_beg New beginning of used region. /// \param new_container_end New end of used region. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline void + SANITIZER_CDECL __sanitizer_annotate_double_ended_contiguous_container( + const void *storage_beg, const void *storage_end, + const void *old_container_beg, const void *old_container_end, + const void *new_container_beg, const void *new_container_end) {} +#else void SANITIZER_CDECL __sanitizer_annotate_double_ended_contiguous_container( const void *storage_beg, const void *storage_end, const void *old_container_beg, const void *old_container_end, const void *new_container_beg, const void *new_container_end); +#endif /// Copies memory annotations from a source storage region to a destination /// storage region. After the operation, the destination region has the same @@ -226,9 +241,17 @@ void SANITIZER_CDECL __sanitizer_annotate_double_ended_contiguous_container( /// \param src_end End of the source container region. /// \param dst_begin Begin of the destination container region. /// \param dst_end End of the destination container region. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline void SANITIZER_CDECL +__sanitizer_copy_contiguous_container_annotations(const void *src_begin, + const void *src_end, + const void *dst_begin, + const void *dst_end) {} +#else void SANITIZER_CDECL __sanitizer_copy_contiguous_container_annotations( const void *src_begin, const void *src_end, const void *dst_begin, const void *dst_end); +#endif /// Returns true if the contiguous container [beg, end) is properly /// poisoned. @@ -246,9 +269,16 @@ void SANITIZER_CDECL __sanitizer_copy_contiguous_container_annotations( /// /// \returns True if the contiguous container [beg, end) is properly /// poisoned. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline int + SANITIZER_CDECL __sanitizer_verify_contiguous_container(const void *beg, + const void *mid, + const void *end) {} +#else int SANITIZER_CDECL __sanitizer_verify_contiguous_container(const void *beg, const void *mid, const void *end); +#endif /// Returns true if the double ended contiguous /// container [storage_beg, storage_end) is properly poisoned. @@ -271,9 +301,17 @@ int SANITIZER_CDECL __sanitizer_verify_contiguous_container(const void *beg, /// \returns True if the double-ended contiguous container [storage_beg, /// container_beg, container_end, end) is properly poisoned - only /// [container_beg; container_end) is addressable. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline int SANITIZER_CDECL +__sanitizer_verify_double_ended_contiguous_container(const void *storage_beg, + const void *container_beg, + const void *container_end, + const void *storage_end) {} +#else int SANITIZER_CDECL __sanitizer_verify_double_ended_contiguous_container( const void *storage_beg, const void *container_beg, const void *container_end, const void *storage_end); +#endif /// Similar to __sanitizer_verify_contiguous_container() but also /// returns the address of the first improperly poisoned byte. @@ -285,8 +323,15 @@ int SANITIZER_CDECL __sanitizer_verify_double_ended_contiguous_container( /// \param end Old end of memory region. /// /// \returns The bad address or NULL. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline const void *SANITIZER_CDECL +__sanitizer_contiguous_container_find_bad_address(const void *beg, + const void *mid, + const void *end) {} +#else const void *SANITIZER_CDECL __sanitizer_contiguous_container_find_bad_address( const void *beg, const void *mid, const void *end); +#endif /// returns the address of the first improperly poisoned byte. /// @@ -298,10 +343,17 @@ const void *SANITIZER_CDECL __sanitizer_contiguous_container_find_bad_address( /// \param storage_end End of memory region. /// /// \returns The bad address or NULL. +#ifdef __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ +__attribute__((__internal_linkage__)) inline const void *SANITIZER_CDECL +__sanitizer_double_ended_contiguous_container_find_bad_address( + const void *storage_beg, const void *container_beg, + const void *container_end, const void *storage_end) {} +#else const void *SANITIZER_CDECL __sanitizer_double_ended_contiguous_container_find_bad_address( const void *storage_beg, const void *container_beg, const void *container_end, const void *storage_end); +#endif /// Prints the stack trace leading to this call (useful for calling from the /// debugger). diff --git a/compiler-rt/lib/asan/asan_errors.cpp b/compiler-rt/lib/asan/asan_errors.cpp index 2a207cd06ccac..99d6bdac3d720 100644 --- a/compiler-rt/lib/asan/asan_errors.cpp +++ b/compiler-rt/lib/asan/asan_errors.cpp @@ -514,11 +514,15 @@ ErrorGeneric::ErrorGeneric(u32 tid, uptr pc_, uptr bp_, uptr sp_, uptr addr, } static void PrintContainerOverflowHint() { - Printf("HINT: if you don't care about these errors you may set " - "ASAN_OPTIONS=detect_container_overflow=0.\n" - "If you suspect a false positive see also: " - "https://github.com/google/sanitizers/wiki/" - "AddressSanitizerContainerOverflow.\n"); + Printf( + "HINT: if you don't care about these errors you may set " + "ASAN_OPTIONS=detect_container_overflow=0.\n" + "Or if supported by the container library, pass " + "-D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ to the compiler to disable " + " instrumentation.\n" + "If you suspect a false positive see also: " + "https://github.com/google/sanitizers/wiki/" + "AddressSanitizerContainerOverflow.\n"); } static void PrintShadowByte(InternalScopedString *str, const char *before, diff --git a/compiler-rt/test/asan/TestCases/disable_container_overflow_checks.cpp b/compiler-rt/test/asan/TestCases/disable_container_overflow_checks.cpp new file mode 100644 index 0000000000000..680eb252411da --- /dev/null +++ b/compiler-rt/test/asan/TestCases/disable_container_overflow_checks.cpp @@ -0,0 +1,50 @@ +// Test crash gives guidance on -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ and +// ASAN_OPTIONS=detect_container_overflow=0 +// RUN: %clangxx_asan -O %s -o %t +// RUN: not %run %t 2>&1 | FileCheck --check-prefix=CHECK-CRASH %s +// +// Test overflow checks can be disabled at runtime with +// ASAN_OPTIONS=detect_container_overflow=0 +// RUN: %env_asan_opts=detect_container_overflow=0 %run %t 2>&1 | FileCheck --check-prefix=CHECK-NOCRASH %s +// +// Illustrate use of -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ flag to suppress +// overflow checks at compile time. +// RUN: %clangxx_asan -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ -O %s -o %t-no-overflow +// RUN: %run %t-no-overflow 2>&1 | FileCheck --check-prefix=CHECK-NOCRASH %s +// + +#include +#include +#include + +// public definition of __sanitizer_annotate_contiguous_container +#include "sanitizer/common_interface_defs.h" + +static volatile int one = 1; + +int TestCrash() { + long t[100]; + t[60] = 0; +#if __has_feature(address_sanitizer) + __sanitizer_annotate_contiguous_container(&t[0], &t[0] + 100, &t[0] + 100, + &t[0] + 50); +#endif + // CHECK-CRASH: AddressSanitizer: container-overflow + // CHECK-CRASH: ASAN_OPTIONS=detect_container_overflow=0 + // CHECK-CRASH: __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ + // CHECK-NOCRASH-NOT: AddressSanitizer: container-overflow + // CHECK-NOCRASH-NOT: ASAN_OPTIONS=detect_container_overflow=0 + // CHECK-NOCRASH-NOT: __SANITIZER_DISABLE_CONTAINER_OVERFLOW__ + return (int)t[60 * one]; // Touches the poisoned memory. +} + +int main(int argc, char **argv) { + + int retval = 0; + + retval = TestCrash(); + + printf("Exiting main\n"); + + return retval; +} diff --git a/compiler-rt/test/asan/TestCases/stack_container_dynamic_lib.cpp b/compiler-rt/test/asan/TestCases/stack_container_dynamic_lib.cpp new file mode 100644 index 0000000000000..e17c537f4ac1c --- /dev/null +++ b/compiler-rt/test/asan/TestCases/stack_container_dynamic_lib.cpp @@ -0,0 +1,118 @@ +// Test to demonstrate compile-time disabling of container-overflow checks +// in order to handle uninstrumented libraries +// UNSUPPORTED: target={{.*windows-msvc.*}} + +// Mimic a closed-source library compiled without ASan +// RUN: %clangxx_asan -fno-sanitize=address -DSHARED_LIB %s %fPIC -shared -o %t-so.so + +// Mimic multiple files being linked into a single executable, +// %t-object.o and %t-main compiled seperately and then linked together +// RUN: %clangxx_asan -DMULTI_SOURCE %s -c -o %t-object.o +// RUN: %clangxx_asan %s -c -o %t-main.o +// RUN: %clangxx_asan -o %t %t-main.o %t-object.o +// RUN: not %run %t 2>&1 | FileCheck %s + +// Disable container overflow checks at runtime using ASAN_OPTIONS=detect_container_overflow=0 +// RUN: %env_asan_opts=detect_container_overflow=0 %run %t 2>&1 | FileCheck --check-prefix=CHECK-NO-CONTAINER-OVERFLOW %s + +// RUN: %clangxx_asan -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ -DMULTI_SOURCE %s -c -o %t-object.o +// RUN: %clangxx_asan -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ %s -c -o %t-main.o +// RUN: %clangxx_asan -D__SANITIZER_DISABLE_CONTAINER_OVERFLOW__ -o %t %t-main.o %t-object.o +// RUN: %run %t 2>&1 | FileCheck --check-prefix=CHECK-NO-CONTAINER-OVERFLOW %s + +#include +#include +#include + +template class Stack { +private: + T data[5]; + size_t size; + +public: + Stack() : size(0) { +#if __has_feature(address_sanitizer) && !__ASAN_DISABLE_CONTAINER_OVERFLOW__ + // Mark entire storage as unaddressable initially + __sanitizer_annotate_contiguous_container(data, data + 5, data + 5, data); +#endif + } + + ~Stack() { +#if __has_feature(address_sanitizer) && !__ASAN_DISABLE_CONTAINER_OVERFLOW__ + __sanitizer_annotate_contiguous_container(data, data + 5, data + size, + data + 5); +#endif + } + + void push(const T &value) { + assert(size < 5 && "Stack overflow"); +#if __has_feature(address_sanitizer) && !__ASAN_DISABLE_CONTAINER_OVERFLOW__ + __sanitizer_annotate_contiguous_container(data, data + 5, data + size, + data + size + 1); +#endif + data[size++] = value; + } + + T pop() { + assert(size > 0 && "Cannot pop from empty stack"); + T result = data[--size]; +#if __has_feature(address_sanitizer) && !__ASAN_DISABLE_CONTAINER_OVERFLOW__ + __sanitizer_annotate_contiguous_container(data, data + 5, data + size + 1, + data + size); +#endif + return result; + } +}; + +#ifdef SHARED_LIB +// Mimics a closed-source library compiled without ASan + +extern "C" void push_value_to_stack(Stack &stack) { stack.push(42); } +#else // SHARED_LIB + +# include +# include + +typedef void (*push_func_t)(Stack &); + +# if defined(MULTI_SOURCE) +extern push_func_t push_value; + +extern "C" void do_push_value_to_stack(Stack &stack) { + assert(push_value); + push_value(stack); +} + +# else +push_func_t push_value = nullptr; + +extern "C" void do_push_value_to_stack(Stack &stack); + +int main(int argc, char *argv[]) { + std::string path = std::string(argv[0]) + "-so.so"; + printf("Loading library: %s\n", path.c_str()); + + void *lib = dlopen(path.c_str(), RTLD_NOW); + assert(lib); + + push_value = (push_func_t)dlsym(lib, "push_value_to_stack"); + assert(push_value); + + Stack stack; + do_push_value_to_stack(stack); + + // BOOM! uninstrumented library didn't update container bounds + int value = stack.pop(); + // CHECK: AddressSanitizer: container-overflow + printf("Popped value: %d\n", value); + assert(value == 42 && "Expected value 42"); + + dlclose(lib); + printf("SUCCESS\n"); + // CHECK-NO-CONTAINER-OVERFLOW: SUCCESS + return 0; +} + +# endif // MULTI_SOURCE + +#endif // SHARED_LIB From fc95558f628de4243dc85e31eaaac795435ca031 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Wed, 19 Nov 2025 11:23:53 -0800 Subject: [PATCH 10/48] [TableGen] Use size_t for SubRegIndicesSize (NFC) (#168728) This patch changes the type of SubRegIndicesSize to size_t. The original type deduced for "auto" is a signed type, but size_t, an unsigned type, is safe here according to the usage. --- llvm/utils/TableGen/RegisterInfoEmitter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/utils/TableGen/RegisterInfoEmitter.cpp b/llvm/utils/TableGen/RegisterInfoEmitter.cpp index e8c4a1a08e4ed..19eb32a9623dc 100644 --- a/llvm/utils/TableGen/RegisterInfoEmitter.cpp +++ b/llvm/utils/TableGen/RegisterInfoEmitter.cpp @@ -703,7 +703,7 @@ void RegisterInfoEmitter::emitComposeSubRegIndices(raw_ostream &OS, SmallVector RowMap; SmallVector, 4> Rows; - auto SubRegIndicesSize = llvm::size(SubRegIndices); + size_t SubRegIndicesSize = llvm::size(SubRegIndices); for (const auto &Idx : SubRegIndices) { unsigned Found = ~0u; for (unsigned r = 0, re = Rows.size(); r != re; ++r) { @@ -1526,7 +1526,7 @@ void RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, raw_ostream &MainOS, std::string ClassName = Target.getName().str() + "GenRegisterInfo"; - auto SubRegIndicesSize = llvm::size(SubRegIndices); + size_t SubRegIndicesSize = llvm::size(SubRegIndices); if (!SubRegIndices.empty()) { emitComposeSubRegIndices(OS, ClassName); From 06f0d30e2887b98841a4d5d0915aebbc1ef7480e Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Wed, 19 Nov 2025 14:26:08 -0500 Subject: [PATCH 11/48] [gn] port 0ae2bccde45 more --- llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn | 5 ++++- llvm/utils/gn/secondary/llvm/unittests/Target/ARM/BUILD.gn | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn index 64a5633b847e3..42c6163263cff 100644 --- a/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/lib/Target/ARM/BUILD.gn @@ -37,7 +37,10 @@ tablegen("ARMGenRegisterBank") { } tablegen("ARMGenSDNodeInfo") { - visibility = [ ":LLVMARMCodeGen" ] + visibility = [ + ":LLVMARMCodeGen", + "//llvm/unittests/Target/ARM:ARMTests", + ] args = [ "-gen-sd-node-info" ] td_file = "ARM.td" } diff --git a/llvm/utils/gn/secondary/llvm/unittests/Target/ARM/BUILD.gn b/llvm/utils/gn/secondary/llvm/unittests/Target/ARM/BUILD.gn index 354b03a2640fa..9097c106ed1fc 100644 --- a/llvm/utils/gn/secondary/llvm/unittests/Target/ARM/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/unittests/Target/ARM/BUILD.gn @@ -6,6 +6,7 @@ unittest("ARMTests") { "//llvm/lib/MC", "//llvm/lib/Support", "//llvm/lib/Target", + "//llvm/lib/Target/ARM:ARMGenSDNodeInfo", "//llvm/lib/Target/ARM:LLVMARMCodeGen", "//llvm/lib/Target/ARM/MCTargetDesc", "//llvm/lib/Target/ARM/TargetInfo", From fb8155c2b87f265c56a1668b3640a52afaaa55d2 Mon Sep 17 00:00:00 2001 From: LLVM GN Syncbot Date: Wed, 19 Nov 2025 19:27:00 +0000 Subject: [PATCH 12/48] [gn build] Port 8fce476c8122 --- llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn | 1 + 1 file changed, 1 insertion(+) diff --git a/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn index df9ddf91f2c49..bc4047cb3be52 100644 --- a/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn @@ -190,6 +190,7 @@ static_library("Support") { "regfree.c", "regstrlcpy.c", "xxhash.cpp", + "zOSLibFunctions.cpp", # System "Atomic.cpp", From 60a27953eabe3a0ded7c9b7b7786dfd1fe5d8c5f Mon Sep 17 00:00:00 2001 From: Benjamin Stott Date: Wed, 19 Nov 2025 19:41:06 +0000 Subject: [PATCH 13/48] [Clang][CodeGen] Use EmitLoadOfLValue instead of EmitLoadOfScalar to get LHS for complex compound assignment (#166798) - Fixes https://github.com/llvm/llvm-project/issues/166512 - `ComplexExprEmitter::EmitCompoundAssignLValue` is calling `EmitLoadOfScalar(LValue, SourceLocation)` to load the LHS value in the case that it's non-complex, however this function requires that the value is a simple LValue - issue occurred because the LValue in question was a bitfield LValue. I changed it to use this function which seems to handle all of the different cases (deferring to the original `EmitLoadOfScalar` if it's a simple LValue) --- clang/docs/ReleaseNotes.rst | 1 + clang/lib/CodeGen/CGExprComplex.cpp | 4 +-- .../complex-compound-assign-bitfield.c | 25 +++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 clang/test/CodeGen/complex-compound-assign-bitfield.c diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 7e9119b5f2b46..0746fa93209d3 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -484,6 +484,7 @@ Bug Fixes in This Version - Fixed a failed assertion with empty filename in ``#embed`` directive. (#GH162951) - Fixed a crash triggered by unterminated ``__has_embed``. (#GH162953) - Accept empty enumerations in MSVC-compatible C mode. (#GH114402) +- Fix a bug leading to incorrect code generation with complex number compound assignment and bitfield values, which also caused a crash with UBsan. (#GH166798) - Fixed false-positive shadow diagnostics for lambdas in explicit object member functions. (#GH163731) Bug Fixes to Compiler Builtins diff --git a/clang/lib/CodeGen/CGExprComplex.cpp b/clang/lib/CodeGen/CGExprComplex.cpp index f8a946a76554a..d281c4c20616a 100644 --- a/clang/lib/CodeGen/CGExprComplex.cpp +++ b/clang/lib/CodeGen/CGExprComplex.cpp @@ -1283,7 +1283,7 @@ EmitCompoundAssignLValue(const CompoundAssignOperator *E, else OpInfo.LHS = EmitComplexToComplexCast(LHSVal, LHSTy, OpInfo.Ty, Loc); } else { - llvm::Value *LHSVal = CGF.EmitLoadOfScalar(LHS, Loc); + llvm::Value *LHSVal = CGF.EmitLoadOfLValue(LHS, Loc).getScalarVal(); // For floating point real operands we can directly pass the scalar form // to the binary operator emission and potentially get more efficient code. if (LHSTy->isRealFloatingType()) { @@ -1318,7 +1318,7 @@ EmitCompoundAssignLValue(const CompoundAssignOperator *E, } else { llvm::Value *ResVal = CGF.EmitComplexToScalarConversion(Result, OpInfo.Ty, LHSTy, Loc); - CGF.EmitStoreOfScalar(ResVal, LHS, /*isInit*/ false); + CGF.EmitStoreThroughLValue(RValue::get(ResVal), LHS, /*isInit*/ false); Val = RValue::get(ResVal); } diff --git a/clang/test/CodeGen/complex-compound-assign-bitfield.c b/clang/test/CodeGen/complex-compound-assign-bitfield.c new file mode 100644 index 0000000000000..e705bff22e67d --- /dev/null +++ b/clang/test/CodeGen/complex-compound-assign-bitfield.c @@ -0,0 +1,25 @@ +// RUN: %clang_cc1 %s -triple x86_64-unknown-linux-gnu -std=c23 -emit-llvm -o - | FileCheck %s + +struct Bits { + int pad1: 30; + bool b: 1; + int pad2: 1; +}; + +int main(void) { +// CHECK-LABEL: define dso_local i32 @main() #0 { + struct Bits x; + x.b += __builtin_complex(-1.0f, 0.0f); +// CHECK: %bf.load = load i32, ptr %x, align 4 +// CHECK-NEXT: %bf.lshr = lshr i32 %bf.load, 30 +// CHECK-NEXT: %bf.clear = and i32 %bf.lshr, 1 +// CHECK-NEXT: %bf.cast = trunc i32 %bf.clear to i1 +// CHECK-NEXT: %conv = uitofp i1 %bf.cast to float + +// CHECK: %0 = zext i1 %tobool1 to i32 +// CHECK-NEXT: %bf.load2 = load i32, ptr %x, align 4 +// CHECK-NEXT: %bf.shl = shl i32 %0, 30 +// CHECK-NEXT: %bf.clear3 = and i32 %bf.load2, -1073741825 +// CHECK-NEXT: %bf.set = or i32 %bf.clear3, %bf.shl +// CHECK-NEXT: store i32 %bf.set, ptr %x, align 4 +} From 13e09ebe2dc7699598ac6eeb5fcb8738db27743b Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Wed, 19 Nov 2025 11:44:09 -0800 Subject: [PATCH 14/48] ELF: Add support for relocating R_AARCH64_FUNCINIT64. R_AARCH64_FUNCINIT64 is a dynamic relocation type for relocating word-sized data in the output file using the return value of a function. An R_AARCH64_FUNCINIT64 shall be relocated as an R_AARCH64_IRELATIVE with the target symbol address if the target symbol is non-preemptible, and it shall be a usage error to relocate an R_AARCH64_FUNCINIT64 with a preemptible or STT_GNU_IFUNC target symbol. The initial use case for this relocation type shall be for emitting global variable field initializers for structure protection. With structure protection, the relocation value computation is tied to the compiler implementation in such a way that it would not be reasonable to define a relocation type for it (for example, it may involve computing a hash using a compiler-determined algorithm), hence the need for the computation to be implemented as code in the binary. Part of the AArch64 psABI extension: https://github.com/ARM-software/abi-aa/issues/340 Reviewers: smithp35, fmayer, MaskRay Reviewed By: fmayer Pull Request: https://github.com/llvm/llvm-project/pull/156564 --- lld/ELF/Arch/AArch64.cpp | 5 ++++- lld/ELF/Relocations.cpp | 21 +++++++++++++++++++-- lld/ELF/Target.h | 1 + lld/test/ELF/aarch64-funcinit64-invalid.s | 18 ++++++++++++++++++ lld/test/ELF/aarch64-funcinit64.s | 19 +++++++++++++++++++ 5 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 lld/test/ELF/aarch64-funcinit64-invalid.s create mode 100644 lld/test/ELF/aarch64-funcinit64.s diff --git a/lld/ELF/Arch/AArch64.cpp b/lld/ELF/Arch/AArch64.cpp index b0dc797292511..4613539342f57 100644 --- a/lld/ELF/Arch/AArch64.cpp +++ b/lld/ELF/Arch/AArch64.cpp @@ -114,6 +114,7 @@ AArch64::AArch64(Ctx &ctx) : TargetInfo(ctx) { copyRel = R_AARCH64_COPY; relativeRel = R_AARCH64_RELATIVE; iRelativeRel = R_AARCH64_IRELATIVE; + iRelSymbolicRel = R_AARCH64_FUNCINIT64; gotRel = R_AARCH64_GLOB_DAT; pltRel = R_AARCH64_JUMP_SLOT; symbolicRel = R_AARCH64_ABS64; @@ -137,6 +138,7 @@ RelExpr AArch64::getRelExpr(RelType type, const Symbol &s, case R_AARCH64_ABS16: case R_AARCH64_ABS32: case R_AARCH64_ABS64: + case R_AARCH64_FUNCINIT64: case R_AARCH64_ADD_ABS_LO12_NC: case R_AARCH64_LDST128_ABS_LO12_NC: case R_AARCH64_LDST16_ABS_LO12_NC: @@ -267,7 +269,8 @@ bool AArch64::usesOnlyLowPageBits(RelType type) const { } RelType AArch64::getDynRel(RelType type) const { - if (type == R_AARCH64_ABS64 || type == R_AARCH64_AUTH_ABS64) + if (type == R_AARCH64_ABS64 || type == R_AARCH64_AUTH_ABS64 || + type == R_AARCH64_FUNCINIT64) return type; return R_AARCH64_NONE; } diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp index d21376fd3ee47..ef19a2af0c4d2 100644 --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -849,8 +849,8 @@ bool RelocScan::isStaticLinkTimeConstant(RelExpr e, RelType type, // only the low bits are used. if (e == R_GOT || e == R_PLT) return ctx.target->usesOnlyLowPageBits(type) || !ctx.arg.isPic; - // R_AARCH64_AUTH_ABS64 requires a dynamic relocation. - if (e == RE_AARCH64_AUTH) + // R_AARCH64_AUTH_ABS64 and iRelSymbolicRel require a dynamic relocation. + if (e == RE_AARCH64_AUTH || type == ctx.target->iRelSymbolicRel) return false; // The behavior of an undefined weak reference is implementation defined. @@ -1023,6 +1023,23 @@ void RelocScan::process(RelExpr expr, RelType type, uint64_t offset, } return; } + if (LLVM_UNLIKELY(type == ctx.target->iRelSymbolicRel)) { + if (sym.isPreemptible) { + auto diag = Err(ctx); + diag << "relocation " << type + << " cannot be used against preemptible symbol '" << &sym << "'"; + printLocation(diag, *sec, sym, offset); + } else if (isIfunc) { + auto diag = Err(ctx); + diag << "relocation " << type + << " cannot be used against ifunc symbol '" << &sym << "'"; + printLocation(diag, *sec, sym, offset); + } else { + part.relaDyn->addReloc({ctx.target->iRelativeRel, sec, offset, false, + sym, addend, R_ABS}); + return; + } + } part.relaDyn->addSymbolReloc(rel, *sec, offset, sym, addend, type); // MIPS ABI turns using of GOT and dynamic relocations inside out. diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h index 90d8ddfede2c0..8da0b5cb31ca3 100644 --- a/lld/ELF/Target.h +++ b/lld/ELF/Target.h @@ -145,6 +145,7 @@ class TargetInfo { RelType relativeRel = 0; RelType iRelativeRel = 0; RelType symbolicRel = 0; + RelType iRelSymbolicRel = 0; RelType tlsDescRel = 0; RelType tlsGotRel = 0; RelType tlsModuleIndexRel = 0; diff --git a/lld/test/ELF/aarch64-funcinit64-invalid.s b/lld/test/ELF/aarch64-funcinit64-invalid.s new file mode 100644 index 0000000000000..4577db7429773 --- /dev/null +++ b/lld/test/ELF/aarch64-funcinit64-invalid.s @@ -0,0 +1,18 @@ +# REQUIRES: aarch64 + +# RUN: llvm-mc -filetype=obj -triple=aarch64 %s -o %t.o +# RUN: not ld.lld %t.o -o %t 2>&1 | FileCheck --check-prefix=ERR %s + +.rodata +# ERR: error: relocation R_AARCH64_FUNCINIT64 cannot be used against local symbol +.8byte func@FUNCINIT + +.data +# ERR: error: relocation R_AARCH64_FUNCINIT64 cannot be used against ifunc symbol 'ifunc' +.8byte ifunc@FUNCINIT + +.text +func: +.type ifunc, @gnu_indirect_function +ifunc: +ret diff --git a/lld/test/ELF/aarch64-funcinit64.s b/lld/test/ELF/aarch64-funcinit64.s new file mode 100644 index 0000000000000..5f2b863ee884b --- /dev/null +++ b/lld/test/ELF/aarch64-funcinit64.s @@ -0,0 +1,19 @@ +# REQUIRES: aarch64 + +# RUN: llvm-mc -filetype=obj -triple=aarch64 %s -o %t.o +# RUN: ld.lld %t.o -o %t +# RUN: llvm-readelf -s -r %t | FileCheck %s +# RUN: ld.lld %t.o -o %t -pie +# RUN: llvm-readelf -s -r %t | FileCheck %s +# RUN: not ld.lld %t.o -o %t -shared 2>&1 | FileCheck --check-prefix=ERR %s + +.data +# CHECK: R_AARCH64_IRELATIVE [[FOO:[0-9a-f]*]] +# ERR: relocation R_AARCH64_FUNCINIT64 cannot be used against preemptible symbol 'foo' +.8byte foo@FUNCINIT + +.text +# CHECK: {{0*}}[[FOO]] {{.*}} foo +.globl foo +foo: +ret From 56112685f7a25078868b8f09c72feaf4ceae50f9 Mon Sep 17 00:00:00 2001 From: Andy Kaylor Date: Wed, 19 Nov 2025 11:53:19 -0800 Subject: [PATCH 15/48] [CIR] Handle default arguments in ctors (#168649) This adds the scalar expression visitor needed to handle default arguments being passed to constructors. --- clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp | 4 ++++ clang/test/CIR/CodeGen/defaultarg.cpp | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp index fc5a501e6a700..90d661782b929 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp @@ -711,6 +711,10 @@ class ScalarExprEmitter : public StmtVisitor { return Visit(e->getSubExpr()); } + mlir::Value VisitCXXDefaultArgExpr(CXXDefaultArgExpr *dae) { + CIRGenFunction::CXXDefaultArgExprScope scope(cgf, dae); + return Visit(dae->getExpr()); + } mlir::Value VisitCXXDefaultInitExpr(CXXDefaultInitExpr *die) { CIRGenFunction::CXXDefaultInitExprScope scope(cgf, die); return Visit(die->getExpr()); diff --git a/clang/test/CIR/CodeGen/defaultarg.cpp b/clang/test/CIR/CodeGen/defaultarg.cpp index 807230bd003f5..29c929ccd7838 100644 --- a/clang/test/CIR/CodeGen/defaultarg.cpp +++ b/clang/test/CIR/CodeGen/defaultarg.cpp @@ -30,3 +30,25 @@ void foo() { // OGCG: %[[TMP0:.*]] = alloca i32 // OGCG: store i32 42, ptr %[[TMP0]] // OGCG: call void @_Z3barRKi(ptr {{.*}} %[[TMP0]]) + +struct S +{ + S(int n = 2); +}; + +void test_ctor_defaultarg() { + S s; +} + +// CIR: cir.func {{.*}} @_Z20test_ctor_defaultargv() +// CIR: %[[S:.*]] = cir.alloca !rec_S, !cir.ptr, ["s", init] +// CIR: %[[TWO:.*]] = cir.const #cir.int<2> : !s32i +// CIR: cir.call @_ZN1SC1Ei(%[[S]], %[[TWO]]) : (!cir.ptr, !s32i) -> () + +// LLVM: define{{.*}} @_Z20test_ctor_defaultargv() +// LLVM: %[[S:.*]] = alloca %struct.S +// LLVM: call void @_ZN1SC1Ei(ptr %[[S]], i32 2) + +// OGCG: define{{.*}} @_Z20test_ctor_defaultargv() +// OGCG: %[[S:.*]] = alloca %struct.S +// OGCG: call void @_ZN1SC1Ei(ptr{{.*}} %[[S]], i32 {{.*}} 2) From afcb9537bb40143d45dd5aeb06009b6aaee1f6f6 Mon Sep 17 00:00:00 2001 From: Jordan Rupprecht Date: Wed, 19 Nov 2025 13:57:31 -0600 Subject: [PATCH 16/48] [bazel] Fix bzlmod reference to @vulkan_sdk (#168767) vulkan_sdk_setup is the name of the method that configures it, but the repo itself has the name vulkan_sdk This was caught by enabling the bzlmod flag for CI. The GH action runs `blaze test @llvm-project/...` but the target is tagged manual, so it's excluded. The buildkite CI runs `bazel query | xargs bazel test` which will include manual targets. --- utils/bazel/MODULE.bazel | 2 +- utils/bazel/MODULE.bazel.lock | 4 ++-- utils/bazel/extensions.bzl | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/utils/bazel/MODULE.bazel b/utils/bazel/MODULE.bazel index d061487acf4d7..e99ddfcb8ad2e 100644 --- a/utils/bazel/MODULE.bazel +++ b/utils/bazel/MODULE.bazel @@ -21,7 +21,7 @@ use_repo( "llvm-raw", "llvm_zlib", "vulkan_headers", - "vulkan_sdk_setup", + "vulkan_sdk", "gmp", "mpfr", "mpc", diff --git a/utils/bazel/MODULE.bazel.lock b/utils/bazel/MODULE.bazel.lock index 77c157ee9605f..4715d52a10545 100644 --- a/utils/bazel/MODULE.bazel.lock +++ b/utils/bazel/MODULE.bazel.lock @@ -229,7 +229,7 @@ "moduleExtensions": { "//:extensions.bzl%llvm_repos_extension": { "general": { - "bzlTransitiveDigest": "3NCQtHwwkFzbdvEprZ+u9gQlcf+2PKpoinmAHZTL35o=", + "bzlTransitiveDigest": "5Uc5D84crjXhrcQgNCOOeRsxLkibVlz4ACrhXJCSO2Q=", "usagesDigest": "X0yUkkWyxQ2Y5oZVDkRSE/K4YkDWo1IjhHsL+1weKyU=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -264,7 +264,7 @@ ] } }, - "vulkan_sdk_setup": { + "vulkan_sdk": { "repoRuleId": "@@//:vulkan_sdk.bzl%vulkan_sdk_setup", "attributes": {} }, diff --git a/utils/bazel/extensions.bzl b/utils/bazel/extensions.bzl index b0d5871b722a7..bb5ce1955f916 100644 --- a/utils/bazel/extensions.bzl +++ b/utils/bazel/extensions.bzl @@ -36,7 +36,7 @@ def _llvm_repos_extension_impl(module_ctx): ], ) - vulkan_sdk_setup(name = "vulkan_sdk_setup") + vulkan_sdk_setup(name = "vulkan_sdk") http_archive( name = "gmp", From e148d2d422c4f310785e38942c8eb7243b065d7a Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Wed, 19 Nov 2025 20:10:14 +0000 Subject: [PATCH 17/48] [LV] Simplify existing load/store sink/hoisting tests, extend coverage. Clean up some of the existing predicated load/store sink/hosting tests and add additional test coverage for more complex cases. --- ...predicated-loads-with-predicated-stores.ll | 581 +++++++++++++++--- .../LoopVectorize/hoist-predicated-loads.ll | 402 +++++++----- 2 files changed, 718 insertions(+), 265 deletions(-) diff --git a/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads-with-predicated-stores.ll b/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads-with-predicated-stores.ll index d447a39aafd93..ac767c68e0b25 100644 --- a/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads-with-predicated-stores.ll +++ b/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads-with-predicated-stores.ll @@ -1,20 +1,15 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals none --filter-out-after "scalar.ph:" --version 6 ; RUN: opt -passes=loop-vectorize -force-vector-width=2 -force-vector-interleave=1 -S %s | FileCheck %s -define void @test_stores_noalias_via_rt_checks_after_loads(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @test_stores_noalias_via_rt_checks_after_loads(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @test_stores_noalias_via_rt_checks_after_loads( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -22,10 +17,8 @@ define void @test_stores_noalias_via_rt_checks_after_loads(ptr %dst, ptr %src, p ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE17:.*]] ] @@ -106,11 +99,10 @@ define void @test_stores_noalias_via_rt_checks_after_loads(ptr %dst, ptr %src, p ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE17]] ; CHECK: [[PRED_STORE_CONTINUE17]]: ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP43]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -141,27 +133,22 @@ else: loop.latch: %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: ret void } -define void @test_aliasing_store(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @test_aliasing_store(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @test_aliasing_store( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -173,10 +160,8 @@ define void @test_aliasing_store(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[BOUND17:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP1]] ; CHECK-NEXT: [[FOUND_CONFLICT8:%.*]] = and i1 [[BOUND06]], [[BOUND17]] ; CHECK-NEXT: [[CONFLICT_RDX9:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT8]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX9]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX9]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE21:.*]] ] @@ -259,11 +244,10 @@ define void @test_aliasing_store(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE21]] ; CHECK: [[PRED_STORE_CONTINUE21]]: ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP43:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP43]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP20:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -295,28 +279,23 @@ else: loop.latch: %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: ret void } -define void @test_noalias_store_via_runtime_checks(ptr %dst, ptr %dst.1, ptr %src, ptr %cond, i32 %n) { +define void @test_noalias_store_via_runtime_checks(ptr %dst, ptr %dst.1, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @test_noalias_store_via_runtime_checks( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[DST_1:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[DST_1:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST_1]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST_1]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -336,10 +315,8 @@ define void @test_noalias_store_via_runtime_checks(ptr %dst, ptr %dst.1, ptr %sr ; CHECK-NEXT: [[BOUND116:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP1]] ; CHECK-NEXT: [[FOUND_CONFLICT17:%.*]] = and i1 [[BOUND015]], [[BOUND116]] ; CHECK-NEXT: [[CONFLICT_RDX18:%.*]] = or i1 [[CONFLICT_RDX14]], [[FOUND_CONFLICT17]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX18]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX18]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE30:.*]] ] @@ -424,11 +401,10 @@ define void @test_noalias_store_via_runtime_checks(ptr %dst, ptr %dst.1, ptr %sr ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE30]] ; CHECK: [[PRED_STORE_CONTINUE30]]: ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP45:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP45:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP45]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP33:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -461,27 +437,22 @@ else: loop.latch: %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: ret void } -define void @test_memory_op_between_loads_alias(ptr %dst, ptr %src, ptr %cond, ptr %dst.1, i32 %n) { +define void @test_memory_op_between_loads_alias(ptr %dst, ptr %src, ptr %cond, ptr %dst.1) { ; CHECK-LABEL: define void @test_memory_op_between_loads_alias( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], ptr [[DST_1:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], ptr [[DST_1:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -493,10 +464,8 @@ define void @test_memory_op_between_loads_alias(ptr %dst, ptr %src, ptr %cond, p ; CHECK-NEXT: [[BOUND17:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP1]] ; CHECK-NEXT: [[FOUND_CONFLICT8:%.*]] = and i1 [[BOUND06]], [[BOUND17]] ; CHECK-NEXT: [[CONFLICT_RDX9:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT8]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX9]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX9]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE17:.*]] ] @@ -547,26 +516,25 @@ define void @test_memory_op_between_loads_alias(ptr %dst, ptr %src, ptr %cond, p ; CHECK-NEXT: br i1 [[TMP26]], label %[[PRED_STORE_IF14:.*]], label %[[PRED_STORE_CONTINUE15:.*]] ; CHECK: [[PRED_STORE_IF14]]: ; CHECK-NEXT: [[TMP27:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP4]] -; CHECK-NEXT: [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 4, !alias.scope [[META38]], !noalias [[META40]] +; CHECK-NEXT: [[TMP32:%.*]] = load i32, ptr [[TMP27]], align 4, !alias.scope [[META38]], !noalias [[META40]] ; CHECK-NEXT: [[TMP29:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] -; CHECK-NEXT: store i32 [[TMP28]], ptr [[TMP29]], align 4, !alias.scope [[META42]], !noalias [[META35]] +; CHECK-NEXT: store i32 [[TMP32]], ptr [[TMP29]], align 4, !alias.scope [[META42]], !noalias [[META35]] ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE15]] ; CHECK: [[PRED_STORE_CONTINUE15]]: ; CHECK-NEXT: [[TMP30:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1 ; CHECK-NEXT: br i1 [[TMP30]], label %[[PRED_STORE_IF16:.*]], label %[[PRED_STORE_CONTINUE17]] ; CHECK: [[PRED_STORE_IF16]]: ; CHECK-NEXT: [[TMP31:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP5]] -; CHECK-NEXT: [[TMP32:%.*]] = load i32, ptr [[TMP31]], align 4, !alias.scope [[META38]], !noalias [[META40]] +; CHECK-NEXT: [[TMP28:%.*]] = load i32, ptr [[TMP31]], align 4, !alias.scope [[META38]], !noalias [[META40]] ; CHECK-NEXT: [[TMP33:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP5]] -; CHECK-NEXT: store i32 [[TMP32]], ptr [[TMP33]], align 4, !alias.scope [[META42]], !noalias [[META35]] +; CHECK-NEXT: store i32 [[TMP28]], ptr [[TMP33]], align 4, !alias.scope [[META42]], !noalias [[META35]] ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE17]] ; CHECK: [[PRED_STORE_CONTINUE17]]: ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP34:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP34:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP34]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP43:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -601,28 +569,23 @@ else: loop.latch: %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: ret void } -define void @test_memory_op_between_loads_no_alias_via_rt_checks(ptr %dst, ptr %src, ptr %cond, ptr %dst.1, i32 %n) { +define void @test_memory_op_between_loads_no_alias_via_rt_checks(ptr %dst, ptr %src, ptr %cond, ptr %dst.1) { ; CHECK-LABEL: define void @test_memory_op_between_loads_no_alias_via_rt_checks( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], ptr [[DST_1:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], ptr [[DST_1:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST_1]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST_1]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST_1]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -642,10 +605,8 @@ define void @test_memory_op_between_loads_no_alias_via_rt_checks(ptr %dst, ptr % ; CHECK-NEXT: [[BOUND116:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP1]] ; CHECK-NEXT: [[FOUND_CONFLICT17:%.*]] = and i1 [[BOUND015]], [[BOUND116]] ; CHECK-NEXT: [[CONFLICT_RDX18:%.*]] = or i1 [[CONFLICT_RDX14]], [[FOUND_CONFLICT17]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX18]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX18]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE26:.*]] ] @@ -698,26 +659,25 @@ define void @test_memory_op_between_loads_no_alias_via_rt_checks(ptr %dst, ptr % ; CHECK-NEXT: br i1 [[TMP28]], label %[[PRED_STORE_IF23:.*]], label %[[PRED_STORE_CONTINUE24:.*]] ; CHECK: [[PRED_STORE_IF23]]: ; CHECK-NEXT: [[TMP29:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP4]] -; CHECK-NEXT: [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 4, !alias.scope [[META53]] +; CHECK-NEXT: [[TMP34:%.*]] = load i32, ptr [[TMP29]], align 4, !alias.scope [[META53]] ; CHECK-NEXT: [[TMP31:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] -; CHECK-NEXT: store i32 [[TMP30]], ptr [[TMP31]], align 4, !alias.scope [[META54]], !noalias [[META55]] +; CHECK-NEXT: store i32 [[TMP34]], ptr [[TMP31]], align 4, !alias.scope [[META54]], !noalias [[META55]] ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE24]] ; CHECK: [[PRED_STORE_CONTINUE24]]: ; CHECK-NEXT: [[TMP32:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1 ; CHECK-NEXT: br i1 [[TMP32]], label %[[PRED_STORE_IF25:.*]], label %[[PRED_STORE_CONTINUE26]] ; CHECK: [[PRED_STORE_IF25]]: ; CHECK-NEXT: [[TMP33:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP5]] -; CHECK-NEXT: [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 4, !alias.scope [[META53]] +; CHECK-NEXT: [[TMP30:%.*]] = load i32, ptr [[TMP33]], align 4, !alias.scope [[META53]] ; CHECK-NEXT: [[TMP35:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP5]] -; CHECK-NEXT: store i32 [[TMP34]], ptr [[TMP35]], align 4, !alias.scope [[META54]], !noalias [[META55]] +; CHECK-NEXT: store i32 [[TMP30]], ptr [[TMP35]], align 4, !alias.scope [[META54]], !noalias [[META55]] ; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE26]] ; CHECK: [[PRED_STORE_CONTINUE26]]: ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP36:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP36:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP36]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP56:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -752,10 +712,431 @@ else: loop.latch: %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: ret void } +; Test that stores are NOT sunk when there's an aliasing load between them +; without scoped noalias metadata. +define void @test_stores_not_sunk_due_to_aliasing_load(ptr %dst, ptr %alias, ptr %cond) { +; CHECK-LABEL: define void @test_stores_not_sunk_due_to_aliasing_load( +; CHECK-SAME: ptr [[DST:%.*]], ptr [[ALIAS:%.*]], ptr [[COND:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*:]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] +; CHECK: [[VECTOR_MEMCHECK]]: +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[ALIAS]], i64 400 +; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] +; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] +; CHECK-NEXT: [[BOUND03:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP2]] +; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[ALIAS]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] +; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK: [[VECTOR_PH]]: +; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] +; CHECK: [[VECTOR_BODY]]: +; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE11:.*]] ] +; CHECK-NEXT: [[TMP4:%.*]] = add i32 [[INDEX]], 0 +; CHECK-NEXT: [[TMP5:%.*]] = add i32 [[INDEX]], 1 +; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds i32, ptr [[COND]], i32 [[TMP4]] +; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i32>, ptr [[TMP6]], align 4, !alias.scope [[META58:![0-9]+]] +; CHECK-NEXT: [[TMP10:%.*]] = icmp ule <2 x i32> [[WIDE_LOAD]], splat (i32 11) +; CHECK-NEXT: [[TMP7:%.*]] = xor <2 x i1> [[TMP10]], splat (i1 true) +; CHECK-NEXT: [[TMP8:%.*]] = extractelement <2 x i1> [[TMP7]], i32 0 +; CHECK-NEXT: br i1 [[TMP8]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]] +; CHECK: [[PRED_STORE_IF]]: +; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds i32, ptr [[ALIAS]], i32 [[TMP4]] +; CHECK-NEXT: [[TMP15:%.*]] = load i32, ptr [[TMP9]], align 4, !alias.scope [[META61:![0-9]+]] +; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] +; CHECK-NEXT: store i32 [[TMP15]], ptr [[TMP12]], align 4, !alias.scope [[META63:![0-9]+]], !noalias [[META65:![0-9]+]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE]] +; CHECK: [[PRED_STORE_CONTINUE]]: +; CHECK-NEXT: [[TMP13:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1 +; CHECK-NEXT: br i1 [[TMP13]], label %[[PRED_STORE_IF6:.*]], label %[[PRED_STORE_CONTINUE7:.*]] +; CHECK: [[PRED_STORE_IF6]]: +; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i32, ptr [[ALIAS]], i32 [[TMP5]] +; CHECK-NEXT: [[TMP11:%.*]] = load i32, ptr [[TMP14]], align 4, !alias.scope [[META61]] +; CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP5]] +; CHECK-NEXT: store i32 [[TMP11]], ptr [[TMP16]], align 4, !alias.scope [[META63]], !noalias [[META65]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE7]] +; CHECK: [[PRED_STORE_CONTINUE7]]: +; CHECK-NEXT: [[TMP17:%.*]] = extractelement <2 x i1> [[TMP10]], i32 0 +; CHECK-NEXT: br i1 [[TMP17]], label %[[PRED_STORE_IF8:.*]], label %[[PRED_STORE_CONTINUE9:.*]] +; CHECK: [[PRED_STORE_IF8]]: +; CHECK-NEXT: [[TMP18:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] +; CHECK-NEXT: store i32 10, ptr [[TMP18]], align 4, !alias.scope [[META63]], !noalias [[META65]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE9]] +; CHECK: [[PRED_STORE_CONTINUE9]]: +; CHECK-NEXT: [[TMP20:%.*]] = extractelement <2 x i1> [[TMP10]], i32 1 +; CHECK-NEXT: br i1 [[TMP20]], label %[[PRED_STORE_IF10:.*]], label %[[PRED_STORE_CONTINUE11]] +; CHECK: [[PRED_STORE_IF10]]: +; CHECK-NEXT: [[TMP19:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP5]] +; CHECK-NEXT: store i32 10, ptr [[TMP19]], align 4, !alias.scope [[META63]], !noalias [[META65]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE11]] +; CHECK: [[PRED_STORE_CONTINUE11]]: +; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 +; CHECK-NEXT: [[TMP21:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP21]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP66:![0-9]+]] +; CHECK: [[MIDDLE_BLOCK]]: +; CHECK-NEXT: br [[EXIT:label %.*]] +; CHECK: [[SCALAR_PH]]: +; +entry: + br label %loop + +loop: + %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ] + %gep.cond = getelementptr inbounds i32, ptr %cond, i32 %iv + %c = load i32, ptr %gep.cond, align 4 + %c.0 = icmp ule i32 %c, 11 + br i1 %c.0, label %then, label %else + +then: + %gep.dst.then = getelementptr inbounds i32, ptr %dst, i32 %iv + store i32 10, ptr %gep.dst.then, align 4 + br label %loop.latch + +else: + ; This aliasing load prevents store sinking + %gep.alias = getelementptr inbounds i32, ptr %alias, i32 %iv + %v = load i32, ptr %gep.alias, align 4 + %gep.dst.else = getelementptr inbounds i32, ptr %dst, i32 %iv + store i32 %v, ptr %gep.dst.else, align 4 + br label %loop.latch + +loop.latch: + %iv.next = add nuw nsw i32 %iv, 1 + %ec = icmp eq i32 %iv.next, 100 + br i1 %ec, label %exit, label %loop + +exit: + ret void +} + +define void @test_stores_not_sunk_aliasing_load_between(ptr %dst, ptr %mid, ptr %cond) { +; CHECK-LABEL: define void @test_stores_not_sunk_aliasing_load_between( +; CHECK-SAME: ptr [[DST:%.*]], ptr [[MID:%.*]], ptr [[COND:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*:]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] +; CHECK: [[VECTOR_MEMCHECK]]: +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[MID]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] +; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[MID]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] +; CHECK-NEXT: [[BOUND03:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP2]] +; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] +; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] +; CHECK-NEXT: [[BOUND06:%.*]] = icmp ult ptr [[MID]], [[SCEVGEP2]] +; CHECK-NEXT: [[BOUND17:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP1]] +; CHECK-NEXT: [[FOUND_CONFLICT8:%.*]] = and i1 [[BOUND06]], [[BOUND17]] +; CHECK-NEXT: [[CONFLICT_RDX9:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT8]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX9]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK: [[VECTOR_PH]]: +; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] +; CHECK: [[VECTOR_BODY]]: +; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE15:.*]] ] +; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[INDEX]], 0 +; CHECK-NEXT: [[TMP1:%.*]] = add i32 [[INDEX]], 1 +; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[COND]], i32 [[TMP0]] +; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i32>, ptr [[TMP2]], align 4, !alias.scope [[META68:![0-9]+]] +; CHECK-NEXT: [[TMP3:%.*]] = icmp ule <2 x i32> [[WIDE_LOAD]], splat (i32 11) +; CHECK-NEXT: [[TMP4:%.*]] = xor <2 x i1> [[TMP3]], splat (i1 true) +; CHECK-NEXT: [[TMP5:%.*]] = extractelement <2 x i1> [[TMP4]], i32 0 +; CHECK-NEXT: br i1 [[TMP5]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]] +; CHECK: [[PRED_STORE_IF]]: +; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP0]] +; CHECK-NEXT: store i32 20, ptr [[TMP6]], align 4, !alias.scope [[META71:![0-9]+]], !noalias [[META73:![0-9]+]] +; CHECK-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 4, !alias.scope [[META71]], !noalias [[META73]] +; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i32, ptr [[MID]], i32 [[TMP0]] +; CHECK-NEXT: store i32 [[TMP7]], ptr [[TMP8]], align 4, !alias.scope [[META75:![0-9]+]], !noalias [[META68]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE]] +; CHECK: [[PRED_STORE_CONTINUE]]: +; CHECK-NEXT: [[TMP9:%.*]] = extractelement <2 x i1> [[TMP4]], i32 1 +; CHECK-NEXT: br i1 [[TMP9]], label %[[PRED_STORE_IF10:.*]], label %[[PRED_STORE_CONTINUE11:.*]] +; CHECK: [[PRED_STORE_IF10]]: +; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP1]] +; CHECK-NEXT: store i32 20, ptr [[TMP10]], align 4, !alias.scope [[META71]], !noalias [[META73]] +; CHECK-NEXT: [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 4, !alias.scope [[META71]], !noalias [[META73]] +; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[MID]], i32 [[TMP1]] +; CHECK-NEXT: store i32 [[TMP11]], ptr [[TMP12]], align 4, !alias.scope [[META75]], !noalias [[META68]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE11]] +; CHECK: [[PRED_STORE_CONTINUE11]]: +; CHECK-NEXT: [[TMP13:%.*]] = extractelement <2 x i1> [[TMP3]], i32 0 +; CHECK-NEXT: br i1 [[TMP13]], label %[[PRED_STORE_IF12:.*]], label %[[PRED_STORE_CONTINUE13:.*]] +; CHECK: [[PRED_STORE_IF12]]: +; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP0]] +; CHECK-NEXT: store i32 10, ptr [[TMP14]], align 4, !alias.scope [[META71]], !noalias [[META73]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE13]] +; CHECK: [[PRED_STORE_CONTINUE13]]: +; CHECK-NEXT: [[TMP15:%.*]] = extractelement <2 x i1> [[TMP3]], i32 1 +; CHECK-NEXT: br i1 [[TMP15]], label %[[PRED_STORE_IF14:.*]], label %[[PRED_STORE_CONTINUE15]] +; CHECK: [[PRED_STORE_IF14]]: +; CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP1]] +; CHECK-NEXT: store i32 10, ptr [[TMP16]], align 4, !alias.scope [[META71]], !noalias [[META73]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE15]] +; CHECK: [[PRED_STORE_CONTINUE15]]: +; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 +; CHECK-NEXT: [[TMP17:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP17]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP76:![0-9]+]] +; CHECK: [[MIDDLE_BLOCK]]: +; CHECK-NEXT: br [[EXIT:label %.*]] +; CHECK: [[SCALAR_PH]]: +; +entry: + br label %loop + +loop: + %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ] + %gep.cond = getelementptr inbounds i32, ptr %cond, i32 %iv + %c = load i32, ptr %gep.cond, align 4 + %c.0 = icmp ule i32 %c, 11 + br i1 %c.0, label %then, label %else + +then: + %gep.dst.then = getelementptr inbounds i32, ptr %dst, i32 %iv + store i32 10, ptr %gep.dst.then, align 4 + br label %loop.latch + +else: + %gep.dst.else = getelementptr inbounds i32, ptr %dst, i32 %iv + store i32 20, ptr %gep.dst.else, align 4 + %gep.mid = getelementptr inbounds i32, ptr %mid, i32 %iv + %l = load i32, ptr %gep.dst.else + store i32 %l, ptr %gep.mid, align 4 + br label %loop.latch + +loop.latch: + %iv.next = add nuw nsw i32 %iv, 1 + %ec = icmp eq i32 %iv.next, 100 + br i1 %ec, label %exit, label %loop + +exit: + ret void +} + +define void @sink_multiple_store_groups_noalias_via_scev(ptr %dst, ptr %src) { +; CHECK-LABEL: define void @sink_multiple_store_groups_noalias_via_scev( +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*:]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] +; CHECK: [[VECTOR_MEMCHECK]]: +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 12688 +; CHECK-NEXT: [[SCEVGEP8:%.*]] = getelementptr i8, ptr [[SRC]], i64 12828 +; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP8]] +; CHECK-NEXT: [[BOUND2:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND1]], [[BOUND2]] +; CHECK-NEXT: br i1 [[FOUND_CONFLICT]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK: [[VECTOR_PH]]: +; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] +; CHECK: [[VECTOR_BODY]]: +; CHECK-NEXT: [[INDEX1:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE9:.*]] ] +; CHECK-NEXT: [[INDEX:%.*]] = mul i64 [[INDEX1]], 16 +; CHECK-NEXT: [[IV:%.*]] = add i64 [[INDEX]], 0 +; CHECK-NEXT: [[TMP17:%.*]] = add i64 [[INDEX]], 16 +; CHECK-NEXT: [[GEP_SRC:%.*]] = getelementptr double, ptr [[SRC]], i64 [[IV]] +; CHECK-NEXT: [[TMP22:%.*]] = getelementptr double, ptr [[SRC]], i64 [[TMP17]] +; CHECK-NEXT: [[TMP23:%.*]] = insertelement <2 x ptr> poison, ptr [[GEP_SRC]], i32 0 +; CHECK-NEXT: [[TMP24:%.*]] = insertelement <2 x ptr> [[TMP23]], ptr [[TMP22]], i32 1 +; CHECK-NEXT: [[GEP_FLAG:%.*]] = getelementptr i8, ptr [[GEP_SRC]], i64 152 +; CHECK-NEXT: [[TMP26:%.*]] = getelementptr i8, ptr [[TMP22]], i64 152 +; CHECK-NEXT: [[TMP27:%.*]] = load i32, ptr [[GEP_FLAG]], align 4, !alias.scope [[META78:![0-9]+]] +; CHECK-NEXT: [[TMP28:%.*]] = load i32, ptr [[TMP26]], align 4, !alias.scope [[META78]] +; CHECK-NEXT: [[TMP29:%.*]] = insertelement <2 x i32> poison, i32 [[TMP27]], i32 0 +; CHECK-NEXT: [[TMP30:%.*]] = insertelement <2 x i32> [[TMP29]], i32 [[TMP28]], i32 1 +; CHECK-NEXT: [[TMP31:%.*]] = icmp eq <2 x i32> [[TMP30]], zeroinitializer +; CHECK-NEXT: [[TMP13:%.*]] = load double, ptr [[GEP_SRC]], align 8, !alias.scope [[META78]] +; CHECK-NEXT: [[TMP14:%.*]] = load double, ptr [[TMP22]], align 8, !alias.scope [[META78]] +; CHECK-NEXT: [[TMP15:%.*]] = insertelement <2 x double> poison, double [[TMP13]], i32 0 +; CHECK-NEXT: [[WIDE_LOAD:%.*]] = insertelement <2 x double> [[TMP15]], double [[TMP14]], i32 1 +; CHECK-NEXT: [[TMP33:%.*]] = xor <2 x i1> [[TMP31]], splat (i1 true) +; CHECK-NEXT: [[TMP34:%.*]] = fadd <2 x double> [[WIDE_LOAD]], splat (double 8.000000e+00) +; CHECK-NEXT: [[GEP_DST1_ELSE:%.*]] = getelementptr double, ptr [[DST]], i64 [[IV]] +; CHECK-NEXT: [[TMP37:%.*]] = getelementptr double, ptr [[DST]], i64 [[TMP17]] +; CHECK-NEXT: [[TMP38:%.*]] = insertelement <2 x ptr> poison, ptr [[GEP_DST1_ELSE]], i32 0 +; CHECK-NEXT: [[TMP39:%.*]] = insertelement <2 x ptr> [[TMP38]], ptr [[TMP37]], i32 1 +; CHECK-NEXT: [[TMP40:%.*]] = extractelement <2 x i1> [[TMP33]], i32 0 +; CHECK-NEXT: br i1 [[TMP40]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]] +; CHECK: [[PRED_LOAD_IF]]: +; CHECK-NEXT: [[TMP41:%.*]] = extractelement <2 x double> [[TMP34]], i32 0 +; CHECK-NEXT: store double [[TMP41]], ptr [[GEP_DST1_ELSE]], align 8, !alias.scope [[META81:![0-9]+]], !noalias [[META78]] +; CHECK-NEXT: [[GEP_SRC_16:%.*]] = getelementptr i8, ptr [[GEP_SRC]], i64 16 +; CHECK-NEXT: [[TMP43:%.*]] = load double, ptr [[GEP_SRC_16]], align 8, !alias.scope [[META78]] +; CHECK-NEXT: [[TMP44:%.*]] = insertelement <2 x double> poison, double [[TMP43]], i32 0 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]] +; CHECK: [[PRED_LOAD_CONTINUE]]: +; CHECK-NEXT: [[TMP45:%.*]] = phi <2 x double> [ poison, %[[VECTOR_BODY]] ], [ [[TMP44]], %[[PRED_LOAD_IF]] ] +; CHECK-NEXT: [[TMP46:%.*]] = extractelement <2 x i1> [[TMP33]], i32 1 +; CHECK-NEXT: br i1 [[TMP46]], label %[[PRED_LOAD_IF2:.*]], label %[[PRED_LOAD_CONTINUE3:.*]] +; CHECK: [[PRED_LOAD_IF2]]: +; CHECK-NEXT: [[TMP47:%.*]] = extractelement <2 x double> [[TMP34]], i32 1 +; CHECK-NEXT: store double [[TMP47]], ptr [[TMP37]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: [[TMP48:%.*]] = getelementptr i8, ptr [[TMP22]], i64 16 +; CHECK-NEXT: [[TMP49:%.*]] = load double, ptr [[TMP48]], align 8, !alias.scope [[META78]] +; CHECK-NEXT: [[TMP50:%.*]] = insertelement <2 x double> [[TMP45]], double [[TMP49]], i32 1 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE3]] +; CHECK: [[PRED_LOAD_CONTINUE3]]: +; CHECK-NEXT: [[TMP51:%.*]] = phi <2 x double> [ [[TMP45]], %[[PRED_LOAD_CONTINUE]] ], [ [[TMP50]], %[[PRED_LOAD_IF2]] ] +; CHECK-NEXT: [[TMP53:%.*]] = fmul <2 x double> splat (double 2.000000e+01), [[TMP51]] +; CHECK-NEXT: [[TMP54:%.*]] = extractelement <2 x i1> [[TMP33]], i32 0 +; CHECK-NEXT: br i1 [[TMP54]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]] +; CHECK: [[PRED_STORE_IF]]: +; CHECK-NEXT: [[GEP_DST2_ELSE:%.*]] = getelementptr i8, ptr [[GEP_DST1_ELSE]], i64 8 +; CHECK-NEXT: [[TMP56:%.*]] = extractelement <2 x double> [[TMP53]], i32 0 +; CHECK-NEXT: store double [[TMP56]], ptr [[GEP_DST2_ELSE]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE]] +; CHECK: [[PRED_STORE_CONTINUE]]: +; CHECK-NEXT: [[TMP57:%.*]] = extractelement <2 x i1> [[TMP33]], i32 1 +; CHECK-NEXT: br i1 [[TMP57]], label %[[PRED_STORE_IF4:.*]], label %[[PRED_STORE_CONTINUE5:.*]] +; CHECK: [[PRED_STORE_IF4]]: +; CHECK-NEXT: [[TMP58:%.*]] = getelementptr i8, ptr [[TMP37]], i64 8 +; CHECK-NEXT: [[TMP59:%.*]] = extractelement <2 x double> [[TMP53]], i32 1 +; CHECK-NEXT: store double [[TMP59]], ptr [[TMP58]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE5]] +; CHECK: [[PRED_STORE_CONTINUE5]]: +; CHECK-NEXT: [[TMP60:%.*]] = extractelement <2 x i1> [[TMP31]], i32 0 +; CHECK-NEXT: br i1 [[TMP60]], label %[[PRED_STORE_IF6:.*]], label %[[PRED_STORE_CONTINUE7:.*]] +; CHECK: [[PRED_STORE_IF6]]: +; CHECK-NEXT: [[TMP62:%.*]] = getelementptr double, ptr [[DST]], i64 [[IV]] +; CHECK-NEXT: store double [[TMP13]], ptr [[TMP62]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: [[TMP64:%.*]] = getelementptr i8, ptr [[TMP62]], i64 8 +; CHECK-NEXT: store double 1.000000e+01, ptr [[TMP64]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE7]] +; CHECK: [[PRED_STORE_CONTINUE7]]: +; CHECK-NEXT: [[TMP66:%.*]] = extractelement <2 x i1> [[TMP31]], i32 1 +; CHECK-NEXT: br i1 [[TMP66]], label %[[PRED_STORE_IF8:.*]], label %[[PRED_STORE_CONTINUE9]] +; CHECK: [[PRED_STORE_IF8]]: +; CHECK-NEXT: [[TMP68:%.*]] = getelementptr double, ptr [[DST]], i64 [[TMP17]] +; CHECK-NEXT: store double [[TMP14]], ptr [[TMP68]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: [[TMP70:%.*]] = getelementptr i8, ptr [[TMP68]], i64 8 +; CHECK-NEXT: store double 1.000000e+01, ptr [[TMP70]], align 8, !alias.scope [[META81]], !noalias [[META78]] +; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE9]] +; CHECK: [[PRED_STORE_CONTINUE9]]: +; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX1]], 2 +; CHECK-NEXT: [[TMP52:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP52]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP83:![0-9]+]] +; CHECK: [[MIDDLE_BLOCK]]: +; CHECK-NEXT: br [[EXIT:label %.*]] +; CHECK: [[SCALAR_PH]]: +; +entry: + br label %loop + +loop: + %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ] + %gep.src = getelementptr double, ptr %src, i64 %iv + %gep.flag = getelementptr i8, ptr %gep.src, i64 152 + %c = load i32, ptr %gep.flag, align 4 + %cmp = icmp eq i32 %c, 0 + %v.1 = load double, ptr %gep.src, align 8 + br i1 %cmp, label %then, label %else + +then: + %gep.dst1.then = getelementptr double, ptr %dst, i64 %iv + store double %v.1, ptr %gep.dst1.then, align 8 + %gep.dst2.then = getelementptr i8, ptr %gep.dst1.then, i64 8 + store double 10.0, ptr %gep.dst2.then, align 8 + br label %loop.latch + +else: + %r.1 = fadd double %v.1, 8.0 + %gep.dst1.else = getelementptr double, ptr %dst, i64 %iv + store double %r.1, ptr %gep.dst1.else, align 8 + %gep.src.16 = getelementptr i8, ptr %gep.src, i64 16 + %v.3 = load double, ptr %gep.src.16, align 8 + %r.2 = fmul double 20.0, %v.3 + %gep.dst2.else = getelementptr i8, ptr %gep.dst1.else, i64 8 + store double %r.2, ptr %gep.dst2.else, align 8 + br label %loop.latch + +loop.latch: + %iv.next = add i64 %iv, 16 + %exit.cond = icmp eq i64 %iv.next, 1600 + br i1 %exit.cond, label %exit, label %loop + +exit: + ret void +} + +define void @multiple_store_groups_alias(ptr %dst, ptr %src) { +; CHECK-LABEL: define void @multiple_store_groups_alias( +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*]]: +; CHECK-NEXT: br label %[[LOOP:.*]] +; CHECK: [[LOOP]]: +; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ] +; CHECK-NEXT: [[GEP_SRC:%.*]] = getelementptr double, ptr [[SRC]], i64 [[IV]] +; CHECK-NEXT: [[GEP_FLAG:%.*]] = getelementptr i8, ptr [[GEP_SRC]], i64 152 +; CHECK-NEXT: [[C:%.*]] = load i32, ptr [[GEP_FLAG]], align 4 +; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[C]], 0 +; CHECK-NEXT: [[V_1:%.*]] = load double, ptr [[GEP_SRC]], align 8 +; CHECK-NEXT: br i1 [[CMP]], label %[[THEN:.*]], label %[[ELSE:.*]] +; CHECK: [[ELSE]]: +; CHECK-NEXT: [[GEP_DST1_THEN:%.*]] = getelementptr double, ptr [[DST]], i64 [[IV]] +; CHECK-NEXT: store double [[V_1]], ptr [[GEP_DST1_THEN]], align 8 +; CHECK-NEXT: [[GEP_DST2_THEN:%.*]] = getelementptr i8, ptr [[GEP_DST1_THEN]], i64 7 +; CHECK-NEXT: store double 1.200000e+01, ptr [[GEP_DST2_THEN]], align 8 +; CHECK-NEXT: br label %[[LOOP_LATCH]] +; CHECK: [[THEN]]: +; CHECK-NEXT: [[T_1:%.*]] = fadd double [[V_1]], 1.000000e+01 +; CHECK-NEXT: [[GEP_DST1_ELSE:%.*]] = getelementptr double, ptr [[DST]], i64 [[IV]] +; CHECK-NEXT: store double [[T_1]], ptr [[GEP_DST1_ELSE]], align 8 +; CHECK-NEXT: [[GEP_SRC_16:%.*]] = getelementptr i8, ptr [[GEP_SRC]], i64 16 +; CHECK-NEXT: [[V_3:%.*]] = load double, ptr [[GEP_SRC_16]], align 8 +; CHECK-NEXT: [[T_2:%.*]] = fmul double 2.000000e+01, [[V_3]] +; CHECK-NEXT: [[GEP_DST2_ELSE:%.*]] = getelementptr i8, ptr [[GEP_DST1_ELSE]], i64 7 +; CHECK-NEXT: store double [[T_2]], ptr [[GEP_DST2_ELSE]], align 8 +; CHECK-NEXT: br label %[[LOOP_LATCH]] +; CHECK: [[LOOP_LATCH]]: +; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 16 +; CHECK-NEXT: [[EXIT_COND:%.*]] = icmp eq i64 [[IV_NEXT]], 1600 +; CHECK-NEXT: br i1 [[EXIT_COND]], label %[[EXIT:.*]], label %[[LOOP]] +; CHECK: [[EXIT]]: +; CHECK-NEXT: ret void +; +entry: + br label %loop + +loop: + %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ] + %gep.src = getelementptr double, ptr %src, i64 %iv + %gep.flag = getelementptr i8, ptr %gep.src, i64 152 + %c = load i32, ptr %gep.flag, align 4 + %cmp = icmp eq i32 %c, 0 + %v.1 = load double, ptr %gep.src, align 8 + br i1 %cmp, label %then, label %else + +else: + %gep.dst1.then = getelementptr double, ptr %dst, i64 %iv + store double %v.1, ptr %gep.dst1.then, align 8 + %gep.dst2.then = getelementptr i8, ptr %gep.dst1.then, i64 7 + store double 12.0, ptr %gep.dst2.then, align 8 + br label %loop.latch + +then: + %r.1 = fadd double %v.1, 10.0 + %gep.dst1.else = getelementptr double, ptr %dst, i64 %iv + store double %r.1, ptr %gep.dst1.else, align 8 + %gep.src.16 = getelementptr i8, ptr %gep.src, i64 16 + %v.3 = load double, ptr %gep.src.16, align 8 + %r.2 = fmul double 20.0, %v.3 + %gep.dst2.else = getelementptr i8, ptr %gep.dst1.else, i64 7 + store double %r.2, ptr %gep.dst2.else, align 8 + br label %loop.latch + +loop.latch: + %iv.next = add i64 %iv, 16 + %exit.cond = icmp eq i64 %iv.next, 1600 + br i1 %exit.cond, label %exit, label %loop + +exit: + ret void +} diff --git a/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads.ll b/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads.ll index b30d010aaf9c9..e4c893f5269bb 100644 --- a/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads.ll +++ b/llvm/test/Transforms/LoopVectorize/hoist-predicated-loads.ll @@ -1,20 +1,15 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals none --filter-out-after "scalar.ph:" --version 6 ; RUN: opt -passes=loop-vectorize -force-vector-width=2 -force-vector-interleave=1 -S %s | FileCheck %s -define void @test(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @test(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @test( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -22,10 +17,8 @@ define void @test(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] @@ -76,11 +69,10 @@ define void @test(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[TMP37:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP37]], align 4, !alias.scope [[META5:![0-9]+]], !noalias [[META7:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP60:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] -; CHECK-NEXT: br i1 [[TMP60]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]] +; CHECK-NEXT: [[TMP38:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP38]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -108,7 +100,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -116,16 +108,15 @@ exit: } ; Negative test: Different addresses - should NOT hoist -define void @different_addresses(ptr %dst, ptr %src1, ptr %src2, ptr %cond, i32 %n) { +define void @different_addresses(ptr %dst, ptr %src1, ptr %src2, ptr %cond) { ; CHECK-LABEL: define void @different_addresses( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC1:%.*]], ptr [[SRC2:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC1:%.*]], ptr [[SRC2:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[SRC15:%.*]] = ptrtoint ptr [[SRC1]] to i64 ; CHECK-NEXT: [[SRC23:%.*]] = ptrtoint ptr [[SRC2]] to i64 ; CHECK-NEXT: [[COND2:%.*]] = ptrtoint ptr [[COND]] to i64 ; CHECK-NEXT: [[DST1:%.*]] = ptrtoint ptr [[DST]] to i64 -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: ; CHECK-NEXT: [[TMP0:%.*]] = sub i64 [[DST1]], [[COND2]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = icmp ult i64 [[TMP0]], 8 @@ -135,10 +126,8 @@ define void @different_addresses(ptr %dst, ptr %src1, ptr %src2, ptr %cond, i32 ; CHECK-NEXT: [[TMP2:%.*]] = sub i64 [[DST1]], [[SRC15]] ; CHECK-NEXT: [[FOUND_CONFLICT9:%.*]] = icmp ult i64 [[TMP2]], 8 ; CHECK-NEXT: [[CONFLICT_RDX10:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT9]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX10]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX10]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE13:.*]] ] @@ -189,11 +178,10 @@ define void @different_addresses(ptr %dst, ptr %src1, ptr %src2, ptr %cond, i32 ; CHECK-NEXT: [[TMP34:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP34]], align 4 ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP60:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] -; CHECK-NEXT: br i1 [[TMP60]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]] +; CHECK-NEXT: [[TMP35:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP35]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -222,7 +210,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -230,21 +218,16 @@ exit: } ; Negative test: Non-complementary masks - should NOT hoist -define void @non_complementary_masks(ptr %dst, ptr %src, ptr %cond1, ptr %cond2, i32 %n) { +define void @non_complementary_masks(ptr %dst, ptr %src, ptr %cond1, ptr %cond2) { ; CHECK-LABEL: define void @non_complementary_masks( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND1:%.*]], ptr [[COND2:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND1:%.*]], ptr [[COND2:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND1]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND2]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND1]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[COND2]], i64 400 +; CHECK-NEXT: [[SCEVGEP3:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND1]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -256,10 +239,8 @@ define void @non_complementary_masks(ptr %dst, ptr %src, ptr %cond1, ptr %cond2, ; CHECK-NEXT: [[BOUND18:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT9:%.*]] = and i1 [[BOUND07]], [[BOUND18]] ; CHECK-NEXT: [[CONFLICT_RDX10:%.*]] = or i1 [[CONFLICT_RDX]], [[FOUND_CONFLICT9]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX10]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX10]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE17:.*]] ] @@ -315,11 +296,10 @@ define void @non_complementary_masks(ptr %dst, ptr %src, ptr %cond1, ptr %cond2, ; CHECK-NEXT: [[TMP41:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI18]], ptr [[TMP41]], align 4, !alias.scope [[META21:![0-9]+]], !noalias [[META23:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP63:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] -; CHECK-NEXT: br i1 [[TMP63]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP24:![0-9]+]] +; CHECK-NEXT: [[TMP42:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP42]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP24:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -353,7 +333,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -362,20 +342,15 @@ exit: ; Negative test: Different access sizes - should NOT hoist ; Both loads use the same pointer but have different types (i8 vs i32) -define void @different_access_sizes(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @different_access_sizes(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @different_access_sizes( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -383,10 +358,8 @@ define void @different_access_sizes(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] @@ -438,11 +411,10 @@ define void @different_access_sizes(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[TMP31:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP31]], align 4, !alias.scope [[META31:![0-9]+]], !noalias [[META33:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP32:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP32:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP32]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP34:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -471,7 +443,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -479,20 +451,15 @@ exit: } ; Positive test: Same address with different alignments - should hoist with minimum alignment -define void @different_alignments_same_address(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @different_alignments_same_address(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @different_alignments_same_address( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -500,10 +467,8 @@ define void @different_alignments_same_address(ptr %dst, ptr %src, ptr %cond, i3 ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] @@ -554,11 +519,10 @@ define void @different_alignments_same_address(ptr %dst, ptr %src, ptr %cond, i3 ; CHECK-NEXT: [[TMP34:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP34]], align 4, !alias.scope [[META41:![0-9]+]], !noalias [[META43:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP48:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] -; CHECK-NEXT: br i1 [[TMP48]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP44:![0-9]+]] +; CHECK-NEXT: [[TMP36:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP36]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP44:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -586,7 +550,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -594,9 +558,9 @@ exit: } ; Negative test: Volatile loads - should NOT hoist -define void @volatile_load(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @volatile_load(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @volatile_load( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*]]: ; CHECK-NEXT: br label %[[LOOP:.*]] ; CHECK: [[LOOP]]: @@ -618,7 +582,7 @@ define void @volatile_load(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[GEP_DST:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[IV]] ; CHECK-NEXT: store i32 [[MERGE]], ptr [[GEP_DST]], align 4 ; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1 -; CHECK-NEXT: [[EC:%.*]] = icmp eq i32 [[IV_NEXT]], [[N]] +; CHECK-NEXT: [[EC:%.*]] = icmp eq i32 [[IV_NEXT]], 100 ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT:.*]], label %[[LOOP]] ; CHECK: [[EXIT]]: ; CHECK-NEXT: ret void @@ -648,7 +612,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -658,20 +622,15 @@ exit: ; Test hoisting with duplicate GEPs: The same address is computed by different ; GEP instructions in different branches. The hoisting pass should use SCEV to ; recognize they compute the same address and hoist the load. -define void @duplicate_gep(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @duplicate_gep(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @duplicate_gep( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP3]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -679,10 +638,8 @@ define void @duplicate_gep(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] @@ -733,11 +690,10 @@ define void @duplicate_gep(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[TMP30:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP30]], align 4, !alias.scope [[META51:![0-9]+]], !noalias [[META53:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP31:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP31:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP31]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP54:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -766,7 +722,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -776,22 +732,15 @@ exit: ; Test with non-unit-stride loads: Loads have stride 16 (2 doubles * 8 bytes) ; instead of unit stride (8 bytes). The hoisting optimization should still work ; since both loads access the same address with the same stride. -define void @non_unit_stride_i64(ptr %dst, ptr %src, ptr %cond, i32 %n) { +define void @non_unit_stride_i64(ptr %dst, ptr %src, ptr %cond) { ; CHECK-LABEL: define void @non_unit_stride_i64( -; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_MEMCHECK:.*]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] ; CHECK: [[VECTOR_MEMCHECK]]: -; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N]], -1 -; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64 -; CHECK-NEXT: [[TMP2:%.*]] = shl nuw nsw i64 [[TMP1]], 2 -; CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[TMP2]], 4 -; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 [[TMP3]] -; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 [[TMP3]] -; CHECK-NEXT: [[TMP4:%.*]] = shl nuw nsw i64 [[TMP1]], 3 -; CHECK-NEXT: [[TMP5:%.*]] = add nuw nsw i64 [[TMP4]], 4 -; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 [[TMP5]] +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr [[COND]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 796 ; CHECK-NEXT: [[BOUND0:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP1]] ; CHECK-NEXT: [[BOUND1:%.*]] = icmp ult ptr [[COND]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]] @@ -799,10 +748,8 @@ define void @non_unit_stride_i64(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] ; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] ; CHECK-NEXT: [[CONFLICT_RDX:%.*]] = or i1 [[FOUND_CONFLICT]], [[FOUND_CONFLICT5]] -; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br i1 [[CONFLICT_RDX]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] @@ -853,11 +800,10 @@ define void @non_unit_stride_i64(ptr %dst, ptr %src, ptr %cond, i32 %n) { ; CHECK-NEXT: [[TMP32:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP6]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP32]], align 4, !alias.scope [[META61:![0-9]+]], !noalias [[META63:![0-9]+]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP33:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP33:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP33]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP64:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] +; CHECK-NEXT: br [[EXIT:label %.*]] ; CHECK: [[SCALAR_PH]]: ; entry: @@ -886,7 +832,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -896,15 +842,12 @@ exit: ; Test that loads inside masked regions (without individual masks) are ; correctly detected and hoisted when they have complementary predicates. -define void @hoist_loads_in_masked_regions(ptr noalias %dst, ptr noalias %src, ptr %cond, i32 %n) { +define void @hoist_loads_in_masked_regions(ptr noalias %dst, ptr noalias %src, ptr %cond) { ; CHECK-LABEL: define void @hoist_loads_in_masked_regions( -; CHECK-SAME: ptr noalias [[DST:%.*]], ptr noalias [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr noalias [[DST:%.*]], ptr noalias [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ] @@ -917,12 +860,12 @@ define void @hoist_loads_in_masked_regions(ptr noalias %dst, ptr noalias %src, p ; CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[INDEX]] ; CHECK-NEXT: store <2 x i32> [[PREDPHI]], ptr [[TMP3]], align 4 ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] +; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 ; CHECK-NEXT: br i1 [[TMP4]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP66:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] -; CHECK: [[SCALAR_PH]]: +; CHECK-NEXT: br label %[[EXIT:.*]] +; CHECK: [[EXIT]]: +; CHECK-NEXT: ret void ; entry: br label %loop @@ -946,7 +889,7 @@ loop.latch: %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv store i32 %merge, ptr %gep.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -956,15 +899,12 @@ exit: ; loading from the same address, all loads are hoisted and replaced, not just ; the first pair. This tests the K loop that continues searching after finding ; the initial complementary pair. -define void @hoist_multiple_complementary_loads(ptr noalias %dst, ptr noalias %src, ptr %cond, i32 %n) { +define void @hoist_multiple_complementary_loads(ptr noalias %dst, ptr noalias %src, ptr %cond) { ; CHECK-LABEL: define void @hoist_multiple_complementary_loads( -; CHECK-SAME: ptr noalias [[DST:%.*]], ptr noalias [[SRC:%.*]], ptr [[COND:%.*]], i32 [[N:%.*]]) { +; CHECK-SAME: ptr noalias [[DST:%.*]], ptr noalias [[SRC:%.*]], ptr [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[N]], 2 -; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK-NEXT: br label %[[VECTOR_PH:.*]] ; CHECK: [[VECTOR_PH]]: -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[N]], 2 -; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[N]], [[N_MOD_VF]] ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] ; CHECK: [[VECTOR_BODY]]: ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE10:.*]] ] @@ -1040,12 +980,12 @@ define void @hoist_multiple_complementary_loads(ptr noalias %dst, ptr noalias %s ; CHECK-NEXT: [[TMP40:%.*]] = getelementptr inbounds i8, ptr [[TMP39]], i64 32 ; CHECK-NEXT: store <2 x i32> [[TMP42]], ptr [[TMP40]], align 4 ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 -; CHECK-NEXT: [[TMP41:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]] -; CHECK-NEXT: br i1 [[TMP41]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP68:![0-9]+]] +; CHECK-NEXT: [[TMP46:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP46]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP67:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: -; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[N]], [[N_VEC]] -; CHECK-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] -; CHECK: [[SCALAR_PH]]: +; CHECK-NEXT: br label %[[EXIT:.*]] +; CHECK: [[EXIT]]: +; CHECK-NEXT: ret void ; entry: br label %loop @@ -1084,7 +1024,7 @@ loop.latch: %offset.dst = getelementptr inbounds i8, ptr %gep.dst, i64 32 store i32 %merge, ptr %offset.dst, align 4 %iv.next = add nuw nsw i32 %iv, 1 - %ec = icmp eq i32 %iv.next, %n + %ec = icmp eq i32 %iv.next, 100 br i1 %ec, label %exit, label %loop exit: @@ -1118,7 +1058,7 @@ define void @hoist_predicated_load_with_chained_geps1(ptr %dst, ptr %src, i1 %co ; CHECK: [[PRED_LOAD_IF]]: ; CHECK-NEXT: [[TMP4:%.*]] = getelementptr [11 x i16], ptr [[SRC]], i64 [[TMP1]] ; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[TMP4]], i64 8 -; CHECK-NEXT: [[TMP6:%.*]] = load i16, ptr [[TMP5]], align 2, !alias.scope [[META70:![0-9]+]] +; CHECK-NEXT: [[TMP6:%.*]] = load i16, ptr [[TMP5]], align 2, !alias.scope [[META68:![0-9]+]] ; CHECK-NEXT: [[TMP7:%.*]] = insertelement <2 x i16> poison, i16 [[TMP6]], i32 0 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]] ; CHECK: [[PRED_LOAD_CONTINUE]]: @@ -1128,7 +1068,7 @@ define void @hoist_predicated_load_with_chained_geps1(ptr %dst, ptr %src, i1 %co ; CHECK: [[PRED_LOAD_IF3]]: ; CHECK-NEXT: [[TMP10:%.*]] = getelementptr [11 x i16], ptr [[SRC]], i64 [[TMP2]] ; CHECK-NEXT: [[TMP11:%.*]] = getelementptr i8, ptr [[TMP10]], i64 8 -; CHECK-NEXT: [[TMP12:%.*]] = load i16, ptr [[TMP11]], align 2, !alias.scope [[META70]] +; CHECK-NEXT: [[TMP12:%.*]] = load i16, ptr [[TMP11]], align 2, !alias.scope [[META68]] ; CHECK-NEXT: [[TMP13:%.*]] = insertelement <2 x i16> [[TMP8]], i16 [[TMP12]], i32 1 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE4]] ; CHECK: [[PRED_LOAD_CONTINUE4]]: @@ -1137,7 +1077,7 @@ define void @hoist_predicated_load_with_chained_geps1(ptr %dst, ptr %src, i1 %co ; CHECK: [[PRED_LOAD_IF5]]: ; CHECK-NEXT: [[TMP15:%.*]] = getelementptr [11 x i16], ptr [[SRC]], i64 [[TMP1]] ; CHECK-NEXT: [[TMP16:%.*]] = getelementptr i8, ptr [[TMP15]], i64 8 -; CHECK-NEXT: [[TMP17:%.*]] = load i16, ptr [[TMP16]], align 2, !alias.scope [[META70]] +; CHECK-NEXT: [[TMP17:%.*]] = load i16, ptr [[TMP16]], align 2, !alias.scope [[META68]] ; CHECK-NEXT: [[TMP18:%.*]] = insertelement <2 x i16> poison, i16 [[TMP17]], i32 0 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE6]] ; CHECK: [[PRED_LOAD_CONTINUE6]]: @@ -1146,17 +1086,17 @@ define void @hoist_predicated_load_with_chained_geps1(ptr %dst, ptr %src, i1 %co ; CHECK: [[PRED_LOAD_IF7]]: ; CHECK-NEXT: [[TMP20:%.*]] = getelementptr [11 x i16], ptr [[SRC]], i64 [[TMP2]] ; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[TMP20]], i64 8 -; CHECK-NEXT: [[TMP22:%.*]] = load i16, ptr [[TMP21]], align 2, !alias.scope [[META70]] +; CHECK-NEXT: [[TMP22:%.*]] = load i16, ptr [[TMP21]], align 2, !alias.scope [[META68]] ; CHECK-NEXT: [[TMP23:%.*]] = insertelement <2 x i16> [[TMP19]], i16 [[TMP22]], i32 1 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE8]] ; CHECK: [[PRED_LOAD_CONTINUE8]]: ; CHECK-NEXT: [[TMP24:%.*]] = phi <2 x i16> [ [[TMP19]], %[[PRED_LOAD_CONTINUE6]] ], [ [[TMP23]], %[[PRED_LOAD_IF7]] ] ; CHECK-NEXT: [[PREDPHI:%.*]] = select i1 [[COND]], <2 x i16> [[TMP24]], <2 x i16> [[TMP14]] ; CHECK-NEXT: [[TMP25:%.*]] = extractelement <2 x i16> [[PREDPHI]], i32 1 -; CHECK-NEXT: store i16 [[TMP25]], ptr [[DST]], align 2, !alias.scope [[META73:![0-9]+]], !noalias [[META70]] +; CHECK-NEXT: store i16 [[TMP25]], ptr [[DST]], align 2, !alias.scope [[META71:![0-9]+]], !noalias [[META68]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2 ; CHECK-NEXT: [[TMP26:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100 -; CHECK-NEXT: br i1 [[TMP26]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP75:![0-9]+]] +; CHECK-NEXT: br i1 [[TMP26]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP73:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: ; CHECK-NEXT: br label %[[SCALAR_PH]] ; CHECK: [[SCALAR_PH]]: @@ -1221,7 +1161,7 @@ define void @hoist_predicated_load_with_chained_geps2(ptr %dst, ptr %src, i1 %co ; CHECK-NEXT: br i1 [[TMP7]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]] ; CHECK: [[PRED_LOAD_IF]]: ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr [[TMP3]], i64 8 -; CHECK-NEXT: [[TMP9:%.*]] = load i16, ptr [[TMP8]], align 2, !alias.scope [[META77:![0-9]+]] +; CHECK-NEXT: [[TMP9:%.*]] = load i16, ptr [[TMP8]], align 2, !alias.scope [[META75:![0-9]+]] ; CHECK-NEXT: [[TMP10:%.*]] = insertelement <2 x i16> poison, i16 [[TMP9]], i32 0 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]] ; CHECK: [[PRED_LOAD_CONTINUE]]: @@ -1230,7 +1170,7 @@ define void @hoist_predicated_load_with_chained_geps2(ptr %dst, ptr %src, i1 %co ; CHECK-NEXT: br i1 [[TMP12]], label %[[PRED_LOAD_IF3:.*]], label %[[PRED_LOAD_CONTINUE4:.*]] ; CHECK: [[PRED_LOAD_IF3]]: ; CHECK-NEXT: [[TMP13:%.*]] = getelementptr i8, ptr [[TMP4]], i64 8 -; CHECK-NEXT: [[TMP14:%.*]] = load i16, ptr [[TMP13]], align 2, !alias.scope [[META77]] +; CHECK-NEXT: [[TMP14:%.*]] = load i16, ptr [[TMP13]], align 2, !alias.scope [[META75]] ; CHECK-NEXT: [[TMP15:%.*]] = insertelement <2 x i16> [[TMP11]], i16 [[TMP14]], i32 1 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE4]] ; CHECK: [[PRED_LOAD_CONTINUE4]]: @@ -1238,7 +1178,7 @@ define void @hoist_predicated_load_with_chained_geps2(ptr %dst, ptr %src, i1 %co ; CHECK-NEXT: br i1 [[COND]], label %[[PRED_LOAD_IF5:.*]], label %[[PRED_LOAD_CONTINUE6:.*]] ; CHECK: [[PRED_LOAD_IF5]]: ; CHECK-NEXT: [[TMP17:%.*]] = getelementptr i8, ptr [[TMP3]], i64 8 -; CHECK-NEXT: [[TMP18:%.*]] = load i16, ptr [[TMP17]], align 2, !alias.scope [[META77]] +; CHECK-NEXT: [[TMP18:%.*]] = load i16, ptr [[TMP17]], align 2, !alias.scope [[META75]] ; CHECK-NEXT: [[TMP19:%.*]] = insertelement <2 x i16> poison, i16 [[TMP18]], i32 0 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE6]] ; CHECK: [[PRED_LOAD_CONTINUE6]]: @@ -1246,17 +1186,17 @@ define void @hoist_predicated_load_with_chained_geps2(ptr %dst, ptr %src, i1 %co ; CHECK-NEXT: br i1 [[COND]], label %[[PRED_LOAD_IF7:.*]], label %[[PRED_LOAD_CONTINUE8]] ; CHECK: [[PRED_LOAD_IF7]]: ; CHECK-NEXT: [[TMP21:%.*]] = getelementptr i8, ptr [[TMP4]], i64 8 -; CHECK-NEXT: [[TMP22:%.*]] = load i16, ptr [[TMP21]], align 2, !alias.scope [[META77]] +; CHECK-NEXT: [[TMP22:%.*]] = load i16, ptr [[TMP21]], align 2, !alias.scope [[META75]] ; CHECK-NEXT: [[TMP23:%.*]] = insertelement <2 x i16> [[TMP20]], i16 [[TMP22]], i32 1 ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE8]] ; CHECK: [[PRED_LOAD_CONTINUE8]]: ; CHECK-NEXT: [[TMP24:%.*]] = phi <2 x i16> [ [[TMP20]], %[[PRED_LOAD_CONTINUE6]] ], [ [[TMP23]], %[[PRED_LOAD_IF7]] ] ; CHECK-NEXT: [[PREDPHI:%.*]] = select i1 [[COND]], <2 x i16> [[TMP24]], <2 x i16> [[TMP16]] ; CHECK-NEXT: [[TMP25:%.*]] = extractelement <2 x i16> [[PREDPHI]], i32 1 -; CHECK-NEXT: store i16 [[TMP25]], ptr [[DST]], align 2, !alias.scope [[META80:![0-9]+]], !noalias [[META77]] +; CHECK-NEXT: store i16 [[TMP25]], ptr [[DST]], align 2, !alias.scope [[META78:![0-9]+]], !noalias [[META75]] ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2 ; CHECK-NEXT: [[TMP26:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100 -; CHECK-NEXT: br i1 [[TMP26]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP82:![0-9]+]] +; CHECK-NEXT: br i1 [[TMP26]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP80:![0-9]+]] ; CHECK: [[MIDDLE_BLOCK]]: ; CHECK-NEXT: br label %[[SCALAR_PH]] ; CHECK: [[SCALAR_PH]]: @@ -1289,3 +1229,135 @@ loop.latch: exit: ret void } + +define void @hoist_all_three_loads_at_same_address(ptr %dst, ptr %src, ptr noalias %cond) { +; CHECK-LABEL: define void @hoist_all_three_loads_at_same_address( +; CHECK-SAME: ptr [[DST:%.*]], ptr [[SRC:%.*]], ptr noalias [[COND:%.*]]) { +; CHECK-NEXT: [[ENTRY:.*:]] +; CHECK-NEXT: br label %[[VECTOR_MEMCHECK:.*]] +; CHECK: [[VECTOR_MEMCHECK]]: +; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[DST]], i64 400 +; CHECK-NEXT: [[SCEVGEP2:%.*]] = getelementptr i8, ptr [[SRC]], i64 400 +; CHECK-NEXT: [[BOUND03:%.*]] = icmp ult ptr [[DST]], [[SCEVGEP2]] +; CHECK-NEXT: [[BOUND14:%.*]] = icmp ult ptr [[SRC]], [[SCEVGEP]] +; CHECK-NEXT: [[FOUND_CONFLICT5:%.*]] = and i1 [[BOUND03]], [[BOUND14]] +; CHECK-NEXT: br i1 [[FOUND_CONFLICT5]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] +; CHECK: [[VECTOR_PH]]: +; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] +; CHECK: [[VECTOR_BODY]]: +; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE11:.*]] ] +; CHECK-NEXT: [[TMP4:%.*]] = add i32 [[INDEX]], 0 +; CHECK-NEXT: [[TMP5:%.*]] = add i32 [[INDEX]], 1 +; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP4]] +; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds i32, ptr [[SRC]], i32 [[TMP5]] +; CHECK-NEXT: [[TMP8:%.*]] = insertelement <2 x ptr> poison, ptr [[TMP6]], i32 0 +; CHECK-NEXT: [[TMP9:%.*]] = insertelement <2 x ptr> [[TMP8]], ptr [[TMP7]], i32 1 +; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[COND]], i32 [[TMP4]] +; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i32>, ptr [[TMP10]], align 4 +; CHECK-NEXT: [[TMP11:%.*]] = icmp ule <2 x i32> [[WIDE_LOAD]], splat (i32 11) +; CHECK-NEXT: [[TMP12:%.*]] = icmp ule <2 x i32> [[WIDE_LOAD]], splat (i32 20) +; CHECK-NEXT: [[TMP13:%.*]] = xor <2 x i1> [[TMP11]], splat (i1 true) +; CHECK-NEXT: [[TMP14:%.*]] = xor <2 x i1> [[TMP12]], splat (i1 true) +; CHECK-NEXT: [[TMP15:%.*]] = select <2 x i1> [[TMP13]], <2 x i1> [[TMP14]], <2 x i1> zeroinitializer +; CHECK-NEXT: [[TMP16:%.*]] = extractelement <2 x i1> [[TMP15]], i32 0 +; CHECK-NEXT: br i1 [[TMP16]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]] +; CHECK: [[PRED_LOAD_IF]]: +; CHECK-NEXT: [[TMP17:%.*]] = load i32, ptr [[TMP6]], align 4, !alias.scope [[META62:![0-9]+]] +; CHECK-NEXT: [[TMP18:%.*]] = insertelement <2 x i32> poison, i32 [[TMP17]], i32 0 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]] +; CHECK: [[PRED_LOAD_CONTINUE]]: +; CHECK-NEXT: [[TMP19:%.*]] = phi <2 x i32> [ poison, %[[VECTOR_BODY]] ], [ [[TMP18]], %[[PRED_LOAD_IF]] ] +; CHECK-NEXT: [[TMP20:%.*]] = extractelement <2 x i1> [[TMP15]], i32 1 +; CHECK-NEXT: br i1 [[TMP20]], label %[[PRED_LOAD_IF2:.*]], label %[[PRED_LOAD_CONTINUE3:.*]] +; CHECK: [[PRED_LOAD_IF2]]: +; CHECK-NEXT: [[TMP21:%.*]] = load i32, ptr [[TMP7]], align 4, !alias.scope [[META62]] +; CHECK-NEXT: [[TMP22:%.*]] = insertelement <2 x i32> [[TMP19]], i32 [[TMP21]], i32 1 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE3]] +; CHECK: [[PRED_LOAD_CONTINUE3]]: +; CHECK-NEXT: [[TMP23:%.*]] = phi <2 x i32> [ [[TMP19]], %[[PRED_LOAD_CONTINUE]] ], [ [[TMP22]], %[[PRED_LOAD_IF2]] ] +; CHECK-NEXT: [[TMP24:%.*]] = add <2 x i32> [[TMP23]], splat (i32 10) +; CHECK-NEXT: [[TMP25:%.*]] = select <2 x i1> [[TMP13]], <2 x i1> [[TMP12]], <2 x i1> zeroinitializer +; CHECK-NEXT: [[TMP26:%.*]] = extractelement <2 x i1> [[TMP25]], i32 0 +; CHECK-NEXT: br i1 [[TMP26]], label %[[PRED_LOAD_IF4:.*]], label %[[PRED_LOAD_CONTINUE5:.*]] +; CHECK: [[PRED_LOAD_IF4]]: +; CHECK-NEXT: [[TMP27:%.*]] = load i32, ptr [[TMP6]], align 4, !alias.scope [[META62]] +; CHECK-NEXT: [[TMP28:%.*]] = insertelement <2 x i32> poison, i32 [[TMP27]], i32 0 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE5]] +; CHECK: [[PRED_LOAD_CONTINUE5]]: +; CHECK-NEXT: [[TMP29:%.*]] = phi <2 x i32> [ poison, %[[PRED_LOAD_CONTINUE3]] ], [ [[TMP28]], %[[PRED_LOAD_IF4]] ] +; CHECK-NEXT: [[TMP30:%.*]] = extractelement <2 x i1> [[TMP25]], i32 1 +; CHECK-NEXT: br i1 [[TMP30]], label %[[PRED_LOAD_IF6:.*]], label %[[PRED_LOAD_CONTINUE7:.*]] +; CHECK: [[PRED_LOAD_IF6]]: +; CHECK-NEXT: [[TMP31:%.*]] = load i32, ptr [[TMP7]], align 4, !alias.scope [[META62]] +; CHECK-NEXT: [[TMP32:%.*]] = insertelement <2 x i32> [[TMP29]], i32 [[TMP31]], i32 1 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE7]] +; CHECK: [[PRED_LOAD_CONTINUE7]]: +; CHECK-NEXT: [[TMP33:%.*]] = phi <2 x i32> [ [[TMP29]], %[[PRED_LOAD_CONTINUE5]] ], [ [[TMP32]], %[[PRED_LOAD_IF6]] ] +; CHECK-NEXT: [[TMP34:%.*]] = mul <2 x i32> [[TMP33]], splat (i32 2) +; CHECK-NEXT: [[TMP35:%.*]] = extractelement <2 x i1> [[TMP11]], i32 0 +; CHECK-NEXT: br i1 [[TMP35]], label %[[PRED_LOAD_IF8:.*]], label %[[PRED_LOAD_CONTINUE9:.*]] +; CHECK: [[PRED_LOAD_IF8]]: +; CHECK-NEXT: [[TMP36:%.*]] = load i32, ptr [[TMP6]], align 4, !alias.scope [[META62]] +; CHECK-NEXT: [[TMP37:%.*]] = insertelement <2 x i32> poison, i32 [[TMP36]], i32 0 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE9]] +; CHECK: [[PRED_LOAD_CONTINUE9]]: +; CHECK-NEXT: [[TMP38:%.*]] = phi <2 x i32> [ poison, %[[PRED_LOAD_CONTINUE7]] ], [ [[TMP37]], %[[PRED_LOAD_IF8]] ] +; CHECK-NEXT: [[TMP39:%.*]] = extractelement <2 x i1> [[TMP11]], i32 1 +; CHECK-NEXT: br i1 [[TMP39]], label %[[PRED_LOAD_IF10:.*]], label %[[PRED_LOAD_CONTINUE11]] +; CHECK: [[PRED_LOAD_IF10]]: +; CHECK-NEXT: [[TMP40:%.*]] = load i32, ptr [[TMP7]], align 4, !alias.scope [[META62]] +; CHECK-NEXT: [[TMP41:%.*]] = insertelement <2 x i32> [[TMP38]], i32 [[TMP40]], i32 1 +; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE11]] +; CHECK: [[PRED_LOAD_CONTINUE11]]: +; CHECK-NEXT: [[TMP42:%.*]] = phi <2 x i32> [ [[TMP38]], %[[PRED_LOAD_CONTINUE9]] ], [ [[TMP41]], %[[PRED_LOAD_IF10]] ] +; CHECK-NEXT: [[PREDPHI:%.*]] = select <2 x i1> [[TMP25]], <2 x i32> [[TMP34]], <2 x i32> [[TMP24]] +; CHECK-NEXT: [[PREDPHI16:%.*]] = select <2 x i1> [[TMP11]], <2 x i32> [[TMP42]], <2 x i32> [[PREDPHI]] +; CHECK-NEXT: [[TMP43:%.*]] = getelementptr inbounds i32, ptr [[DST]], i32 [[TMP4]] +; CHECK-NEXT: store <2 x i32> [[PREDPHI16]], ptr [[TMP43]], align 4, !alias.scope [[META65:![0-9]+]], !noalias [[META62]] +; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 +; CHECK-NEXT: [[TMP44:%.*]] = icmp eq i32 [[INDEX_NEXT]], 100 +; CHECK-NEXT: br i1 [[TMP44]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP67:![0-9]+]] +; CHECK: [[MIDDLE_BLOCK]]: +; CHECK-NEXT: br [[EXIT:label %.*]] +; CHECK: [[SCALAR_PH]]: +; +entry: + br label %loop + +loop: + %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ] + %gep.src = getelementptr inbounds i32, ptr %src, i32 %iv + %gep.cond = getelementptr inbounds i32, ptr %cond, i32 %iv + %l.c = load i32, ptr %gep.cond + %c1 = icmp ule i32 %l.c, 11 + %c2 = icmp ule i32 %l.c, 20 + br i1 %c1, label %then, label %else + +then: + %l.src.then = load i32, ptr %gep.src, align 4 + br label %loop.latch + +else: + br i1 %c2, label %else.if, label %else.else + +else.if: + %l.src.else.if = load i32, ptr %gep.src, align 4 + %mul = mul i32 %l.src.else.if, 2 + br label %loop.latch + +else.else: + %l.src.else.else = load i32, ptr %gep.src, align 4 + %add = add i32 %l.src.else.else, 10 + br label %loop.latch + +loop.latch: + %merge = phi i32 [ %l.src.then, %then ], [ %mul, %else.if ], [ %add, %else.else ] + %gep.dst = getelementptr inbounds i32, ptr %dst, i32 %iv + store i32 %merge, ptr %gep.dst, align 4 + %iv.next = add nuw nsw i32 %iv, 1 + %ec = icmp eq i32 %iv.next, 100 + br i1 %ec, label %exit, label %loop + +exit: + ret void +} From 12131d5cd39025c1e9e521fde6ffbfffd51dff1c Mon Sep 17 00:00:00 2001 From: Mikhail Gudim Date: Wed, 19 Nov 2025 15:11:09 -0500 Subject: [PATCH 18/48] [SLPVectorizer] Widen constant strided loads. (#162324) Given a set of pointers, check if they can be rearranged as follows (%s is a constant): %b + 0 * %s + 0 %b + 0 * %s + 1 %b + 0 * %s + 2 ... %b + 0 * %s + w %b + 1 * %s + 0 %b + 1 * %s + 1 %b + 1 * %s + 2 ... %b + 1 * %s + w ... If the pointers can be rearanged in the above pattern, it means that the memory can be accessed with a strided loads of width `w` and stride `%s`. --- .../Transforms/Vectorize/SLPVectorizer.cpp | 118 ++++++++++++++---- .../RISCV/basic-strided-loads.ll | 18 +-- 2 files changed, 97 insertions(+), 39 deletions(-) diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index b1598e8ccf5c6..4b9ac52748e7c 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -2245,7 +2245,6 @@ class slpvectorizer::BoUpSLP { /// Return true if an array of scalar loads can be replaced with a strided /// load (with constant stride). /// - /// TODO: /// It is possible that the load gets "widened". Suppose that originally each /// load loads `k` bytes and `PointerOps` can be arranged as follows (`%s` is /// constant): %b + 0 * %s + 0 %b + 0 * %s + 1 %b + 0 * %s + 2 @@ -7008,32 +7007,93 @@ bool BoUpSLP::analyzeConstantStrideCandidate( const SmallVectorImpl &SortedIndices, const int64_t Diff, Value *Ptr0, Value *PtrN, StridedPtrInfo &SPtrInfo) const { const size_t Sz = PointerOps.size(); - if (!isStridedLoad(PointerOps, ScalarTy, Alignment, Diff, Sz)) + SmallVector SortedOffsetsFromBase(Sz); + // Go through `PointerOps` in sorted order and record offsets from `Ptr0`. + for (unsigned I : seq(Sz)) { + Value *Ptr = + SortedIndices.empty() ? PointerOps[I] : PointerOps[SortedIndices[I]]; + SortedOffsetsFromBase[I] = + *getPointersDiff(ScalarTy, Ptr0, ScalarTy, Ptr, *DL, *SE); + } + + // The code below checks that `SortedOffsetsFromBase` looks as follows: + // ``` + // [ + // (e_{0, 0}, e_{0, 1}, ..., e_{0, GroupSize - 1}), // first group + // (e_{1, 0}, e_{1, 1}, ..., e_{1, GroupSize - 1}), // secon group + // ... + // (e_{NumGroups - 1, 0}, e_{NumGroups - 1, 1}, ..., e_{NumGroups - 1, + // GroupSize - 1}), // last group + // ] + // ``` + // The distance between consecutive elements within each group should all be + // the same `StrideWithinGroup`. The distance between the first elements of + // consecutive groups should all be the same `StrideBetweenGroups`. + + int64_t StrideWithinGroup = + SortedOffsetsFromBase[1] - SortedOffsetsFromBase[0]; + // Determine size of the first group. Later we will check that all other + // groups have the same size. + auto IsEndOfGroupIndex = [=, &SortedOffsetsFromBase](unsigned Idx) { + return SortedOffsetsFromBase[Idx] - SortedOffsetsFromBase[Idx - 1] != + StrideWithinGroup; + }; + auto Indices = seq(1, Sz); + auto FoundIt = llvm::find_if(Indices, IsEndOfGroupIndex); + unsigned GroupSize = FoundIt != Indices.end() ? *FoundIt : Sz; + + unsigned VecSz = Sz; + Type *NewScalarTy = ScalarTy; + + // Quick detour: at this point we can say what the type of strided load would + // be if all the checks pass. Check if this type is legal for the target. + bool NeedsWidening = Sz != GroupSize; + if (NeedsWidening) { + if (Sz % GroupSize != 0) + return false; + + if (StrideWithinGroup != 1) + return false; + VecSz = Sz / GroupSize; + NewScalarTy = Type::getIntNTy( + SE->getContext(), + DL->getTypeSizeInBits(ScalarTy).getFixedValue() * GroupSize); + } + + if (!isStridedLoad(PointerOps, NewScalarTy, Alignment, Diff, VecSz)) return false; - int64_t Stride = Diff / static_cast(Sz - 1); + int64_t StrideIntVal = StrideWithinGroup; + if (NeedsWidening) { + // Continue with checking the "shape" of `SortedOffsetsFromBase`. + // Check that the strides between groups are all the same. + unsigned CurrentGroupStartIdx = GroupSize; + int64_t StrideBetweenGroups = + SortedOffsetsFromBase[GroupSize] - SortedOffsetsFromBase[0]; + StrideIntVal = StrideBetweenGroups; + for (; CurrentGroupStartIdx < Sz; CurrentGroupStartIdx += GroupSize) { + if (SortedOffsetsFromBase[CurrentGroupStartIdx] - + SortedOffsetsFromBase[CurrentGroupStartIdx - GroupSize] != + StrideBetweenGroups) + return false; + } - // Iterate through all pointers and check if all distances are - // unique multiple of Dist. - SmallSet Dists; - for (Value *Ptr : PointerOps) { - int64_t Dist = 0; - if (Ptr == PtrN) - Dist = Diff; - else if (Ptr != Ptr0) - Dist = *getPointersDiff(ScalarTy, Ptr0, ScalarTy, Ptr, *DL, *SE); - // If the strides are not the same or repeated, we can't - // vectorize. - if (((Dist / Stride) * Stride) != Dist || !Dists.insert(Dist).second) - break; - } - if (Dists.size() == Sz) { - Type *StrideTy = DL->getIndexType(Ptr0->getType()); - SPtrInfo.StrideVal = ConstantInt::get(StrideTy, Stride); - SPtrInfo.Ty = getWidenedType(ScalarTy, Sz); - return true; + auto CheckGroup = [=](const unsigned StartIdx) -> bool { + auto Indices = seq(StartIdx + 1, Sz); + auto FoundIt = llvm::find_if(Indices, IsEndOfGroupIndex); + unsigned GroupEndIdx = FoundIt != Indices.end() ? *FoundIt : Sz; + return GroupEndIdx - StartIdx == GroupSize; + }; + for (unsigned I = 0; I < Sz; I += GroupSize) { + if (!CheckGroup(I)) + return false; + } } - return false; + + Type *StrideTy = DL->getIndexType(Ptr0->getType()); + SPtrInfo.StrideVal = ConstantInt::get(StrideTy, StrideIntVal); + SPtrInfo.Ty = getWidenedType(NewScalarTy, VecSz); + return true; } bool BoUpSLP::analyzeRtStrideCandidate(ArrayRef PointerOps, @@ -15061,11 +15121,19 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef VectorizedVals, } break; case TreeEntry::StridedVectorize: { + const StridedPtrInfo &SPtrInfo = TreeEntryToStridedPtrInfoMap.at(E); + FixedVectorType *StridedLoadTy = SPtrInfo.Ty; + assert(StridedLoadTy && "Missing StridedPoinerInfo for tree entry."); Align CommonAlignment = computeCommonAlignment(UniqueValues.getArrayRef()); VecLdCost = TTI->getStridedMemoryOpCost( - Instruction::Load, VecTy, LI0->getPointerOperand(), + Instruction::Load, StridedLoadTy, LI0->getPointerOperand(), /*VariableMask=*/false, CommonAlignment, CostKind); + if (StridedLoadTy != VecTy) + VecLdCost += + TTI->getCastInstrCost(Instruction::BitCast, VecTy, StridedLoadTy, + getCastContextHint(*E), CostKind); + break; } case TreeEntry::CompressVectorize: { @@ -19870,6 +19938,8 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) { ? NewLI : ::propagateMetadata(NewLI, E->Scalars); + if (StridedLoadTy != VecTy) + V = Builder.CreateBitOrPointerCast(V, VecTy); V = FinalShuffle(V, E); E->VectorizedValue = V; ++NumVectorInstructions; diff --git a/llvm/test/Transforms/SLPVectorizer/RISCV/basic-strided-loads.ll b/llvm/test/Transforms/SLPVectorizer/RISCV/basic-strided-loads.ll index f8229b3555653..f3f9191a6fdc7 100644 --- a/llvm/test/Transforms/SLPVectorizer/RISCV/basic-strided-loads.ll +++ b/llvm/test/Transforms/SLPVectorizer/RISCV/basic-strided-loads.ll @@ -1,6 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 -; RUN: opt -mtriple=riscv64 -mattr=+m,+v -passes=slp-vectorizer -S < %s | FileCheck %s +; RUN: opt -mtriple=riscv64 -mattr=+m,+v,+unaligned-vector-mem -passes=slp-vectorizer -S < %s | FileCheck %s define void @const_stride_1_no_reordering(ptr %pl, ptr %ps) { ; CHECK-LABEL: define void @const_stride_1_no_reordering( @@ -621,21 +621,9 @@ define void @constant_stride_widen_no_reordering(ptr %pl, i64 %stride, ptr %ps) ; CHECK-LABEL: define void @constant_stride_widen_no_reordering( ; CHECK-SAME: ptr [[PL:%.*]], i64 [[STRIDE:%.*]], ptr [[PS:%.*]]) #[[ATTR0]] { ; CHECK-NEXT: [[GEP_L0:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 0 -; CHECK-NEXT: [[GEP_L4:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 100 -; CHECK-NEXT: [[GEP_L8:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 200 -; CHECK-NEXT: [[GEP_L12:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 300 ; CHECK-NEXT: [[GEP_S0:%.*]] = getelementptr inbounds i8, ptr [[PS]], i64 0 -; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i8>, ptr [[GEP_L0]], align 1 -; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i8>, ptr [[GEP_L4]], align 1 -; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i8>, ptr [[GEP_L8]], align 1 -; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i8>, ptr [[GEP_L12]], align 1 -; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <4 x i8> [[TMP1]], <4 x i8> poison, <16 x i32> -; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <4 x i8> [[TMP2]], <4 x i8> poison, <16 x i32> -; CHECK-NEXT: [[TMP7:%.*]] = shufflevector <4 x i8> [[TMP1]], <4 x i8> [[TMP2]], <16 x i32> -; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <4 x i8> [[TMP3]], <4 x i8> poison, <16 x i32> -; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <16 x i8> [[TMP7]], <16 x i8> [[TMP11]], <16 x i32> -; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <4 x i8> [[TMP4]], <4 x i8> poison, <16 x i32> -; CHECK-NEXT: [[TMP8:%.*]] = shufflevector <16 x i8> [[TMP9]], <16 x i8> [[TMP10]], <16 x i32> +; CHECK-NEXT: [[TMP1:%.*]] = call <4 x i32> @llvm.experimental.vp.strided.load.v4i32.p0.i64(ptr align 1 [[GEP_L0]], i64 100, <4 x i1> splat (i1 true), i32 4) +; CHECK-NEXT: [[TMP8:%.*]] = bitcast <4 x i32> [[TMP1]] to <16 x i8> ; CHECK-NEXT: store <16 x i8> [[TMP8]], ptr [[GEP_S0]], align 1 ; CHECK-NEXT: ret void ; From df58c38b5a831da1cd96317297c9482402c60216 Mon Sep 17 00:00:00 2001 From: Kai Lin <50469469+OMG-link@users.noreply.github.com> Date: Thu, 20 Nov 2025 04:20:22 +0800 Subject: [PATCH 19/48] [RISCV][DAGCombiner] Fix potential missed combine in VL->VW extension (#168026) The previous implementation of `combineOp_VLToVWOp_VL` manually replaced old nodes with newly created widened nodes, but only added the new node itself to the `DAGCombiner` worklist. Since the users of the new node were not added, some combine opportunities could be missed when external `DAGCombiner` passes expected those users to be reconsidered. This patch replaces the custom replacement logic with a call to `DCI.CombineTo()`, which performs node replacement in a way consistent with `DAGCombiner::Run`: - Replace all uses of the old node. - Add the new node and its users to the worklist. - Clean up unused nodes when appropriate. Using `CombineTo` ensures that `combineOp_VLToVWOp_VL` behaves consistently with the standard `DAGCombiner` update model, avoiding discrepancies between the private worklist inside this routine and the global worklist managed by the combiner. This resolves missed combine cases involving VL -> VW operator widening. --------- Co-authored-by: Kai Lin --- llvm/lib/Target/RISCV/RISCVISelLowering.cpp | 3 +- .../CodeGen/RISCV/rvv/combine-vl-vw-macc.ll | 54 +++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 llvm/test/CodeGen/RISCV/rvv/combine-vl-vw-macc.ll diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp index 3d6d4f6654d17..3fbfdfb565e53 100644 --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -18396,8 +18396,7 @@ static SDValue combineOp_VLToVWOp_VL(SDNode *N, } } for (std::pair OldNewValues : ValuesToReplace) { - DAG.ReplaceAllUsesOfValueWith(OldNewValues.first, OldNewValues.second); - DCI.AddToWorklist(OldNewValues.second.getNode()); + DCI.CombineTo(OldNewValues.first.getNode(), OldNewValues.second); } return InputRootReplacement; } diff --git a/llvm/test/CodeGen/RISCV/rvv/combine-vl-vw-macc.ll b/llvm/test/CodeGen/RISCV/rvv/combine-vl-vw-macc.ll new file mode 100644 index 0000000000000..943d8d2409ffd --- /dev/null +++ b/llvm/test/CodeGen/RISCV/rvv/combine-vl-vw-macc.ll @@ -0,0 +1,54 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 +; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 +; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 + +define void @matmul_min(ptr %vptr, ptr %scalars, ptr %acc0_ptr, ptr %acc1_ptr) { +; CHECK-LABEL: matmul_min: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: li a4, 64 +; CHECK-NEXT: li a5, 32 +; CHECK-NEXT: vsetvli zero, a5, e8, m2, ta, ma +; CHECK-NEXT: vle8.v v16, (a0) +; CHECK-NEXT: lb a0, 0(a1) +; CHECK-NEXT: lb a1, 1(a1) +; CHECK-NEXT: vsetvli zero, a4, e8, m4, ta, ma +; CHECK-NEXT: vle8.v v8, (a2) +; CHECK-NEXT: vle8.v v12, (a3) +; CHECK-NEXT: vsetvli zero, a5, e8, m2, ta, ma +; CHECK-NEXT: vwmacc.vx v8, a0, v16 +; CHECK-NEXT: vwmacc.vx v12, a1, v16 +; CHECK-NEXT: vsetvli zero, a4, e8, m4, ta, ma +; CHECK-NEXT: vse8.v v8, (a2) +; CHECK-NEXT: vse8.v v12, (a3) +; CHECK-NEXT: ret +entry: + %acc0 = load <32 x i16>, ptr %acc0_ptr, align 1 + %acc1 = load <32 x i16>, ptr %acc1_ptr, align 1 + + %v8 = load <32 x i8>, ptr %vptr, align 1 + %v16 = sext <32 x i8> %v8 to <32 x i16> + + %s0_ptr = getelementptr i8, ptr %scalars, i32 0 + %s0_i8 = load i8, ptr %s0_ptr, align 1 + %s0_i16 = sext i8 %s0_i8 to i16 + %tmp0 = insertelement <32 x i16> poison, i16 %s0_i16, i32 0 + %splat0 = shufflevector <32 x i16> %tmp0, <32 x i16> poison, <32 x i32> zeroinitializer + %mul0 = mul <32 x i16> %splat0, %v16 + %add0 = add <32 x i16> %mul0, %acc0 + + %s1_ptr = getelementptr i8, ptr %scalars, i32 1 + %s1_i8 = load i8, ptr %s1_ptr, align 1 + %s1_i16 = sext i8 %s1_i8 to i16 + %tmp1 = insertelement <32 x i16> poison, i16 %s1_i16, i32 0 + %splat1 = shufflevector <32 x i16> %tmp1, <32 x i16> poison, <32 x i32> zeroinitializer + %mul1 = mul <32 x i16> %splat1, %v16 + %add1 = add <32 x i16> %mul1, %acc1 + + store <32 x i16> %add0, ptr %acc0_ptr, align 1 + store <32 x i16> %add1, ptr %acc1_ptr, align 1 + + ret void +} +;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: +; RV32: {{.*}} +; RV64: {{.*}} From e00314be1cf5e7ebba25339439d427174eb6f24b Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Wed, 19 Nov 2025 12:24:40 -0800 Subject: [PATCH 20/48] workflows/libclang-abi-tests: Remove use of install-ninja action (#168642) This is not needed now that we are using the container to run the workflow. --- .github/workflows/libclang-abi-tests.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/libclang-abi-tests.yml b/.github/workflows/libclang-abi-tests.yml index 62a8d64ea84d0..0d3f9fe3f69ea 100644 --- a/.github/workflows/libclang-abi-tests.yml +++ b/.github/workflows/libclang-abi-tests.yml @@ -101,8 +101,6 @@ jobs: ref: ${{ github.sha }} repo: ${{ github.repository }} steps: - - name: Install Ninja - uses: llvm/actions/install-ninja@5dd955034a6742a2e21d82bf165fcb1050ae7b49 # main - name: Download source code uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: From 2f9f492b3d160dee8ae080e981dd6e92aadf56ce Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Wed, 19 Nov 2025 12:33:07 -0800 Subject: [PATCH 21/48] workflows/hlsl-test-all: Drop use of setup-windows action (#167437) It doesn't look like these tests are actually run on Windows, so we don't need it. --- .github/workflows/hlsl-test-all.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/hlsl-test-all.yaml b/.github/workflows/hlsl-test-all.yaml index eff5d8975187a..6e5bfd5b870a3 100644 --- a/.github/workflows/hlsl-test-all.yaml +++ b/.github/workflows/hlsl-test-all.yaml @@ -52,11 +52,6 @@ jobs: repository: llvm/offload-golden-images ref: main path: golden-images - - name: Setup Windows - if: runner.os == 'Windows' - uses: llvm/actions/setup-windows@5dd955034a6742a2e21d82bf165fcb1050ae7b49 # main - with: - arch: amd64 - name: Build DXC run: | cd DXC From f85942728fe2edfc681831abf8ecd2f245e1aaaa Mon Sep 17 00:00:00 2001 From: Thibault Monnier <97551402+Thibault-Monnier@users.noreply.github.com> Date: Wed, 19 Nov 2025 21:34:49 +0100 Subject: [PATCH 22/48] [CIR] Upstream CIR codegen for mxcsr x86 builtins (#167948) --- clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp | 20 +++++++++++++-- clang/test/CIR/CodeGen/X86/sse-builtins.c | 29 ++++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp index ee6900141647f..08f44c7d87091 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp @@ -169,10 +169,26 @@ mlir::Value CIRGenFunction::emitX86BuiltinExpr(unsigned builtinID, case X86::BI__builtin_ia32_vec_set_v16hi: case X86::BI__builtin_ia32_vec_set_v8si: case X86::BI__builtin_ia32_vec_set_v4di: + cgm.errorNYI(e->getSourceRange(), + std::string("unimplemented X86 builtin call: ") + + getContext().BuiltinInfo.getName(builtinID)); + return {}; case X86::BI_mm_setcsr: - case X86::BI__builtin_ia32_ldmxcsr: + case X86::BI__builtin_ia32_ldmxcsr: { + mlir::Location loc = getLoc(e->getExprLoc()); + Address tmp = createMemTemp(e->getArg(0)->getType(), loc); + builder.createStore(loc, ops[0], tmp); + return emitIntrinsicCallOp(*this, e, "x86.sse.ldmxcsr", builder.getVoidTy(), + tmp.getPointer()); + } case X86::BI_mm_getcsr: - case X86::BI__builtin_ia32_stmxcsr: + case X86::BI__builtin_ia32_stmxcsr: { + mlir::Location loc = getLoc(e->getExprLoc()); + Address tmp = createMemTemp(e->getType(), loc); + emitIntrinsicCallOp(*this, e, "x86.sse.stmxcsr", builder.getVoidTy(), + tmp.getPointer()); + return builder.createLoad(loc, tmp); + } case X86::BI__builtin_ia32_xsave: case X86::BI__builtin_ia32_xsave64: case X86::BI__builtin_ia32_xrstor: diff --git a/clang/test/CIR/CodeGen/X86/sse-builtins.c b/clang/test/CIR/CodeGen/X86/sse-builtins.c index 3a61018741958..04e69a9990159 100644 --- a/clang/test/CIR/CodeGen/X86/sse-builtins.c +++ b/clang/test/CIR/CodeGen/X86/sse-builtins.c @@ -16,6 +16,35 @@ #include +void test_mm_setcsr(unsigned int A) { + // CIR-LABEL: test_mm_setcsr + // CIR: cir.store {{.*}}, {{.*}} : !u32i + // CIR: cir.call_llvm_intrinsic "x86.sse.ldmxcsr" {{.*}} : (!cir.ptr) -> !void + + // LLVM-LABEL: test_mm_setcsr + // LLVM: store i32 + // LLVM: call void @llvm.x86.sse.ldmxcsr(ptr {{.*}}) + + // OGCG-LABEL: test_mm_setcsr + // OGCG: store i32 + // OGCG: call void @llvm.x86.sse.ldmxcsr(ptr {{.*}}) + _mm_setcsr(A); +} + +unsigned int test_mm_getcsr(void) { + // CIR-LABEL: test_mm_getcsr + // CIR: cir.call_llvm_intrinsic "x86.sse.stmxcsr" %{{.*}} : (!cir.ptr) -> !void + // CIR: cir.load {{.*}} : !cir.ptr, !u32i + + // LLVM-LABEL: test_mm_getcsr + // LLVM: call void @llvm.x86.sse.stmxcsr(ptr %{{.*}}) + // LLVM: load i32 + + // OGCG-LABEL: test_mm_getcsr + // OGCG: call void @llvm.x86.sse.stmxcsr(ptr %{{.*}}) + // OGCG: load i32 + return _mm_getcsr(); +} void test_mm_sfence(void) { // CIR-LABEL: test_mm_sfence From c34927ab5ac9f359616657c3f5e05f868db901f6 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Wed, 19 Nov 2025 12:39:14 -0800 Subject: [PATCH 23/48] commit-access-review.py: Remove new contributor check (#168629) We don't need this anymore since all new contributors in the last year have applied for commit access using GitHub issues. There is already code in the script that removes anyone who submitted a request, so we don't need the old code any more (which was way too conservitave and very slow). --- .github/workflows/commit-access-review.py | 81 ----------------------- 1 file changed, 81 deletions(-) diff --git a/.github/workflows/commit-access-review.py b/.github/workflows/commit-access-review.py index 4f539fe98004a..52b9fd35290e5 100644 --- a/.github/workflows/commit-access-review.py +++ b/.github/workflows/commit-access-review.py @@ -170,80 +170,6 @@ def get_num_commits(gh: github.Github, user: str, start_date: datetime.datetime) return count -def is_new_committer_query_repo( - gh: github.Github, user: str, start_date: datetime.datetime -) -> bool: - """ - Determine if ``user`` is a new committer. A new committer can keep their - commit access even if they don't meet the criteria. - """ - variables = { - "user": user, - } - - user_query = """ - query ($user: String!) { - user(login: $user) { - id - } - } - """ - - res_header, res_data = gh._Github__requester.graphql_query( - query=user_query, variables=variables - ) - data = res_data["data"] - variables["owner"] = "llvm" - variables["user_id"] = data["user"]["id"] - variables["start_date"] = start_date.strftime("%Y-%m-%dT%H:%M:%S") - - query = """ - query ($owner: String!, $user_id: ID!){ - organization(login: $owner) { - repository(name: "llvm-project") { - ref(qualifiedName: "main") { - target { - ... on Commit { - history(author: {id: $user_id }, first: 5) { - nodes { - committedDate - } - } - } - } - } - } - } - } - """ - - res_header, res_data = gh._Github__requester.graphql_query( - query=query, variables=variables - ) - data = res_data["data"] - repo = data["organization"]["repository"] - commits = repo["ref"]["target"]["history"]["nodes"] - if len(commits) == 0: - return True - committed_date = commits[-1]["committedDate"] - if datetime.datetime.strptime(committed_date, "%Y-%m-%dT%H:%M:%SZ") < start_date: - return False - return True - - -def is_new_committer( - gh: github.Github, user: str, start_date: datetime.datetime -) -> bool: - """ - Wrapper around is_new_commiter_query_repo to handle exceptions. - """ - try: - return is_new_committer_query_repo(gh, user, start_date) - except: - pass - return True - - def get_review_count( gh: github.Github, user: str, start_date: datetime.datetime ) -> int: @@ -383,13 +309,6 @@ def main(): print("After Commits:", len(triage_list), "triagers") - # Step 4 check for new committers - for user in list(triage_list.keys()): - print("Checking", user) - if is_new_committer(gh, user, one_year_ago): - print("Removing new committer: ", user) - del triage_list[user] - print("Complete:", len(triage_list), "triagers") with open("triagers.log", "w") as triagers_log: From 11dff3a0e06d6471863f4e997f6c4e5d05de3466 Mon Sep 17 00:00:00 2001 From: Erick Velez Date: Wed, 19 Nov 2025 12:42:52 -0800 Subject: [PATCH 24/48] [clang-doc][NFC] Lift Mustache template generation from HTML (#167815) To prepare for more backends to use Mustache templates, this patch lifts the Mustache utilities from `HTMLMustacheGenerator.cpp` to `Generators.h`. A MustacheGenerator interface is created to share code for template creation. --- clang-tools-extra/clang-doc/Generators.cpp | 136 +++++++++++ clang-tools-extra/clang-doc/Generators.h | 88 ++++++- clang-tools-extra/clang-doc/HTMLGenerator.cpp | 13 +- .../clang-doc/HTMLMustacheGenerator.cpp | 215 +++--------------- clang-tools-extra/clang-doc/JSONGenerator.cpp | 11 +- clang-tools-extra/clang-doc/MDGenerator.cpp | 13 +- clang-tools-extra/clang-doc/YAMLGenerator.cpp | 13 +- .../clang-doc/tool/ClangDocMain.cpp | 3 +- 8 files changed, 283 insertions(+), 209 deletions(-) diff --git a/clang-tools-extra/clang-doc/Generators.cpp b/clang-tools-extra/clang-doc/Generators.cpp index a5f6f1c7ea732..667e5d5a318f0 100644 --- a/clang-tools-extra/clang-doc/Generators.cpp +++ b/clang-tools-extra/clang-doc/Generators.cpp @@ -7,9 +7,15 @@ //===----------------------------------------------------------------------===// #include "Generators.h" +#include "support/File.h" +#include "llvm/Support/TimeProfiler.h" LLVM_INSTANTIATE_REGISTRY(clang::doc::GeneratorRegistry) +using namespace llvm; +using namespace llvm::json; +using namespace llvm::mustache; + namespace clang { namespace doc { @@ -42,6 +48,136 @@ std::string getTagType(TagTypeKind AS) { llvm_unreachable("Unknown TagTypeKind"); } +Error createFileOpenError(StringRef FileName, std::error_code EC) { + return createFileError("cannot open file " + FileName, EC); +} + +Error MustacheGenerator::setupTemplate( + std::unique_ptr &Template, StringRef TemplatePath, + std::vector> Partials) { + auto T = MustacheTemplateFile::createMustacheFile(TemplatePath); + if (Error Err = T.takeError()) + return Err; + Template = std::move(T.get()); + for (const auto &[Name, FileName] : Partials) + if (auto Err = Template->registerPartialFile(Name, FileName)) + return Err; + return Error::success(); +} + +Error MustacheGenerator::generateDocumentation( + StringRef RootDir, StringMap> Infos, + const clang::doc::ClangDocContext &CDCtx, std::string DirName) { + { + llvm::TimeTraceScope TS("Setup Templates"); + if (auto Err = setupTemplateFiles(CDCtx)) + return Err; + } + + { + llvm::TimeTraceScope TS("Generate JSON for Mustache"); + if (auto JSONGenerator = findGeneratorByName("json")) { + if (Error Err = JSONGenerator.get()->generateDocumentation( + RootDir, std::move(Infos), CDCtx)) + return Err; + } else + return JSONGenerator.takeError(); + } + + SmallString<128> JSONPath; + sys::path::native(RootDir.str() + "/json", JSONPath); + + { + llvm::TimeTraceScope TS("Iterate JSON files"); + std::error_code EC; + sys::fs::recursive_directory_iterator JSONIter(JSONPath, EC); + std::vector JSONFiles; + JSONFiles.reserve(Infos.size()); + if (EC) + return createStringError("Failed to create directory iterator."); + + SmallString<128> DocsDirPath(RootDir.str() + '/' + DirName); + sys::path::native(DocsDirPath); + if (auto EC = sys::fs::create_directories(DocsDirPath)) + return createFileError(DocsDirPath, EC); + while (JSONIter != sys::fs::recursive_directory_iterator()) { + // create the same directory structure in the docs format dir + if (JSONIter->type() == sys::fs::file_type::directory_file) { + SmallString<128> DocsClonedPath(JSONIter->path()); + sys::path::replace_path_prefix(DocsClonedPath, JSONPath, DocsDirPath); + if (auto EC = sys::fs::create_directories(DocsClonedPath)) { + return createFileError(DocsClonedPath, EC); + } + } + + if (EC) + return createFileError("Failed to iterate: " + JSONIter->path(), EC); + + auto Path = StringRef(JSONIter->path()); + if (!Path.ends_with(".json")) { + JSONIter.increment(EC); + continue; + } + + auto File = MemoryBuffer::getFile(Path); + if (EC = File.getError(); EC) { + // TODO: Buffer errors to report later, look into using Clang + // diagnostics. + llvm::errs() << "Failed to open file: " << Path << " " << EC.message() + << '\n'; + } + + auto Parsed = json::parse((*File)->getBuffer()); + if (!Parsed) + return Parsed.takeError(); + auto ValidJSON = Parsed.get(); + + std::error_code FileErr; + SmallString<128> DocsFilePath(JSONIter->path()); + sys::path::replace_path_prefix(DocsFilePath, JSONPath, DocsDirPath); + sys::path::replace_extension(DocsFilePath, DirName); + raw_fd_ostream InfoOS(DocsFilePath, FileErr, sys::fs::OF_None); + if (FileErr) + return createFileOpenError(Path, FileErr); + + auto RelativeRootPath = getRelativePathToRoot(DocsFilePath, DocsDirPath); + auto InfoTypeStr = + getInfoTypeStr(Parsed->getAsObject(), sys::path::stem(DocsFilePath)); + if (!InfoTypeStr) + return InfoTypeStr.takeError(); + if (Error Err = generateDocForJSON(*Parsed, InfoOS, CDCtx, + InfoTypeStr.get(), RelativeRootPath)) + return Err; + JSONIter.increment(EC); + } + } + + return Error::success(); +} + +Expected MustacheGenerator::getInfoTypeStr(Object *Info, + StringRef Filename) { + auto StrValue = (*Info)["InfoType"]; + if (StrValue.kind() != json::Value::Kind::String) + return createStringError("JSON file '%s' does not contain key: 'InfoType'.", + Filename.str().c_str()); + auto ObjTypeStr = StrValue.getAsString(); + if (!ObjTypeStr.has_value()) + return createStringError( + "JSON file '%s' does not contain 'InfoType' field as a string.", + Filename.str().c_str()); + return ObjTypeStr.value().str(); +} + +SmallString<128> +MustacheGenerator::getRelativePathToRoot(StringRef PathToFile, + StringRef DocsRootPath) { + SmallString<128> PathVec(PathToFile); + // Remove filename, or else the relative path will have an extra "../" + sys::path::remove_filename(PathVec); + return computeRelativePath(DocsRootPath, PathVec); +} + llvm::Error Generator::createResources(ClangDocContext &CDCtx) { return llvm::Error::success(); } diff --git a/clang-tools-extra/clang-doc/Generators.h b/clang-tools-extra/clang-doc/Generators.h index 92d3006e6002d..847722646b029 100644 --- a/clang-tools-extra/clang-doc/Generators.h +++ b/clang-tools-extra/clang-doc/Generators.h @@ -14,6 +14,8 @@ #include "Representation.h" #include "llvm/Support/Error.h" +#include "llvm/Support/JSON.h" +#include "llvm/Support/Mustache.h" #include "llvm/Support/Registry.h" namespace clang { @@ -27,10 +29,9 @@ class Generator { // Write out the decl info for the objects in the given map in the specified // format. - virtual llvm::Error - generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) = 0; + virtual llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName = "") = 0; // This function writes a file with the index previously constructed. // It can be overwritten by any of the inherited generators. @@ -52,6 +53,85 @@ findGeneratorByName(llvm::StringRef Format); std::string getTagType(TagTypeKind AS); +llvm::Error createFileOpenError(StringRef FileName, std::error_code EC); + +class MustacheTemplateFile { + llvm::BumpPtrAllocator Allocator; + llvm::StringSaver Saver; + llvm::mustache::MustacheContext Ctx; + llvm::mustache::Template T; + std::unique_ptr Buffer; + +public: + static Expected> + createMustacheFile(StringRef FileName) { + llvm::ErrorOr> BufferOrError = + llvm::MemoryBuffer::getFile(FileName); + if (auto EC = BufferOrError.getError()) + return createFileOpenError(FileName, EC); + return std::make_unique( + std::move(BufferOrError.get())); + } + + llvm::Error registerPartialFile(StringRef Name, StringRef FileName) { + llvm::ErrorOr> BufferOrError = + llvm::MemoryBuffer::getFile(FileName); + if (auto EC = BufferOrError.getError()) + return createFileOpenError(FileName, EC); + + std::unique_ptr Buffer = std::move(BufferOrError.get()); + StringRef FileContent = Buffer->getBuffer(); + T.registerPartial(Name.str(), FileContent.str()); + return llvm::Error::success(); + } + + void render(llvm::json::Value &V, raw_ostream &OS) { T.render(V, OS); } + + MustacheTemplateFile(std::unique_ptr &&B) + : Saver(Allocator), Ctx(Allocator, Saver), T(B->getBuffer(), Ctx), + Buffer(std::move(B)) {} +}; + +struct MustacheGenerator : public Generator { + Expected getInfoTypeStr(llvm::json::Object *Info, + StringRef Filename); + + /// Used to find the relative path from the file to the format's docs root. + /// Mainly used for the HTML resource paths. + SmallString<128> getRelativePathToRoot(StringRef PathToFile, + StringRef DocsRootPath); + virtual ~MustacheGenerator() = default; + + /// Initializes the template files from disk and calls setupTemplate to + /// register partials + virtual llvm::Error setupTemplateFiles(const ClangDocContext &CDCtx) = 0; + + /// Populates templates with data from JSON and calls any specifics for the + /// format. For example, for HTML it will render the paths for CSS and JS. + virtual llvm::Error generateDocForJSON(llvm::json::Value &JSON, + llvm::raw_fd_ostream &OS, + const ClangDocContext &CDCtx, + StringRef ObjectTypeStr, + StringRef RelativeRootPath) = 0; + + /// Registers partials to templates. + llvm::Error + setupTemplate(std::unique_ptr &Template, + StringRef TemplatePath, + std::vector> Partials); + + /// \brief The main orchestrator for Mustache-based documentation. + /// + /// 1. Initializes templates files from disk by calling setupTemplateFiles. + /// 2. Calls the JSON generator to write JSON to disk. + /// 3. Iterates over the JSON files, recreates the directory structure from + /// JSON, and calls generateDocForJSON for each file. + /// 4. A file of the desired format is created. + llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const clang::doc::ClangDocContext &CDCtx, std::string DirName) override; +}; + // This anchor is used to force the linker to link in the generated object file // and thus register the generators. extern volatile int YAMLGeneratorAnchorSource; diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp index 8294ff9118558..7c8c16b8e8aca 100644 --- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -897,9 +897,9 @@ class HTMLGenerator : public Generator { public: static const char *Format; - llvm::Error generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) override; + llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) override; llvm::Error createResources(ClangDocContext &CDCtx) override; llvm::Error generateDocForInfo(Info *I, llvm::raw_ostream &OS, const ClangDocContext &CDCtx) override; @@ -907,10 +907,9 @@ class HTMLGenerator : public Generator { const char *HTMLGenerator::Format = "html"; -llvm::Error -HTMLGenerator::generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) { +llvm::Error HTMLGenerator::generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) { // Track which directories we already tried to create. llvm::StringSet<> CreatedDirs; diff --git a/clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp b/clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp index 1e757101549c6..c09f908c7eb22 100644 --- a/clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp +++ b/clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp @@ -16,10 +16,7 @@ #include "Representation.h" #include "support/File.h" #include "llvm/Support/Error.h" -#include "llvm/Support/MemoryBuffer.h" -#include "llvm/Support/Mustache.h" #include "llvm/Support/Path.h" -#include "llvm/Support/TimeProfiler.h" using namespace llvm; using namespace llvm::json; @@ -27,82 +24,30 @@ using namespace llvm::mustache; namespace clang { namespace doc { -static Error generateDocForJSON(json::Value &JSON, StringRef Filename, - StringRef Path, raw_fd_ostream &OS, - const ClangDocContext &CDCtx, - StringRef HTMLRootPath); -static Error createFileOpenError(StringRef FileName, std::error_code EC) { - return createFileError("cannot open file " + FileName, EC); -} +static std::unique_ptr NamespaceTemplate = nullptr; + +static std::unique_ptr RecordTemplate = nullptr; -class MustacheHTMLGenerator : public Generator { +class MustacheHTMLGenerator : public MustacheGenerator { public: static const char *Format; - Error generateDocs(StringRef RootDir, - StringMap> Infos, - const ClangDocContext &CDCtx) override; Error createResources(ClangDocContext &CDCtx) override; Error generateDocForInfo(Info *I, raw_ostream &OS, const ClangDocContext &CDCtx) override; + Error setupTemplateFiles(const ClangDocContext &CDCtx) override; + Error generateDocForJSON(json::Value &JSON, raw_fd_ostream &OS, + const ClangDocContext &CDCtx, StringRef ObjTypeStr, + StringRef RelativeRootPath) override; + // Populates templates with CSS stylesheets, JS scripts paths. + Error setupTemplateResources(const ClangDocContext &CDCtx, json::Value &V, + SmallString<128> RelativeRootPath); + llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) override; }; -class MustacheTemplateFile { - BumpPtrAllocator Allocator; - StringSaver Saver; - MustacheContext Ctx; - Template T; - std::unique_ptr Buffer; - -public: - static Expected> - createMustacheFile(StringRef FileName) { - ErrorOr> BufferOrError = - MemoryBuffer::getFile(FileName); - if (auto EC = BufferOrError.getError()) - return createFileOpenError(FileName, EC); - return std::make_unique( - std::move(BufferOrError.get())); - } - - Error registerPartialFile(StringRef Name, StringRef FileName) { - ErrorOr> BufferOrError = - MemoryBuffer::getFile(FileName); - if (auto EC = BufferOrError.getError()) - return createFileOpenError(FileName, EC); - - std::unique_ptr Buffer = std::move(BufferOrError.get()); - StringRef FileContent = Buffer->getBuffer(); - T.registerPartial(Name.str(), FileContent.str()); - return Error::success(); - } - - void render(json::Value &V, raw_ostream &OS) { T.render(V, OS); } - - MustacheTemplateFile(std::unique_ptr &&B) - : Saver(Allocator), Ctx(Allocator, Saver), T(B->getBuffer(), Ctx), - Buffer(std::move(B)) {} -}; - -static std::unique_ptr NamespaceTemplate = nullptr; - -static std::unique_ptr RecordTemplate = nullptr; - -static Error -setupTemplate(std::unique_ptr &Template, - StringRef TemplatePath, - std::vector> Partials) { - auto T = MustacheTemplateFile::createMustacheFile(TemplatePath); - if (Error Err = T.takeError()) - return Err; - Template = std::move(T.get()); - for (const auto &[Name, FileName] : Partials) - if (auto Err = Template->registerPartialFile(Name, FileName)) - return Err; - return Error::success(); -} - -static Error setupTemplateFiles(const clang::doc::ClangDocContext &CDCtx) { +Error MustacheHTMLGenerator::setupTemplateFiles(const ClangDocContext &CDCtx) { // Template files need to use the native path when they're opened, // but have to be used in POSIX style when used in HTML. auto ConvertToNative = [](std::string &&Path) -> std::string { @@ -135,97 +80,17 @@ static Error setupTemplateFiles(const clang::doc::ClangDocContext &CDCtx) { return Error::success(); } -Error MustacheHTMLGenerator::generateDocs( - StringRef RootDir, StringMap> Infos, - const clang::doc::ClangDocContext &CDCtx) { - { - llvm::TimeTraceScope TS("Setup Templates"); - if (auto Err = setupTemplateFiles(CDCtx)) - return Err; - } - - { - llvm::TimeTraceScope TS("Generate JSON for Mustache"); - if (auto JSONGenerator = findGeneratorByName("json")) { - if (Error Err = JSONGenerator.get()->generateDocs( - RootDir, std::move(Infos), CDCtx)) - return Err; - } else - return JSONGenerator.takeError(); - } - SmallString<128> JSONPath; - sys::path::native(RootDir.str() + "/json", JSONPath); - - { - llvm::TimeTraceScope TS("Iterate JSON files"); - std::error_code EC; - sys::fs::recursive_directory_iterator JSONIter(JSONPath, EC); - std::vector JSONFiles; - JSONFiles.reserve(Infos.size()); - if (EC) - return createStringError("Failed to create directory iterator."); - - SmallString<128> HTMLDirPath(RootDir.str() + "/html"); - if (auto EC = sys::fs::create_directories(HTMLDirPath)) - return createFileError(HTMLDirPath, EC); - while (JSONIter != sys::fs::recursive_directory_iterator()) { - // create the same directory structure in the HTML dir - if (JSONIter->type() == sys::fs::file_type::directory_file) { - SmallString<128> HTMLClonedPath(JSONIter->path()); - sys::path::replace_path_prefix(HTMLClonedPath, JSONPath, HTMLDirPath); - if (auto EC = sys::fs::create_directories(HTMLClonedPath)) - return createFileError(HTMLClonedPath, EC); - } - - if (EC) - return createFileError("Failed to iterate: " + JSONIter->path(), EC); - - auto Path = StringRef(JSONIter->path()); - if (!Path.ends_with(".json")) { - JSONIter.increment(EC); - continue; - } - - auto File = MemoryBuffer::getFile(Path); - if (EC = File.getError(); EC) - // TODO: Buffer errors to report later, look into using Clang - // diagnostics. - llvm::errs() << "Failed to open file: " << Path << " " << EC.message() - << '\n'; - - auto Parsed = json::parse((*File)->getBuffer()); - if (!Parsed) - return Parsed.takeError(); - - std::error_code FileErr; - SmallString<128> HTMLFilePath(JSONIter->path()); - sys::path::replace_path_prefix(HTMLFilePath, JSONPath, HTMLDirPath); - sys::path::replace_extension(HTMLFilePath, "html"); - raw_fd_ostream InfoOS(HTMLFilePath, FileErr, sys::fs::OF_None); - if (FileErr) - return createFileOpenError(Path, FileErr); - - if (Error Err = - generateDocForJSON(*Parsed, sys::path::stem(HTMLFilePath), - HTMLFilePath, InfoOS, CDCtx, HTMLDirPath)) - return Err; - JSONIter.increment(EC); - } - } - - return Error::success(); -} - -static Error setupTemplateValue(const ClangDocContext &CDCtx, json::Value &V, - SmallString<128> RelativeHTMLPath) { +Error MustacheHTMLGenerator::setupTemplateResources( + const ClangDocContext &CDCtx, json::Value &V, + SmallString<128> RelativeRootPath) { V.getAsObject()->insert({"ProjectName", CDCtx.ProjectName}); json::Value StylesheetArr = Array(); - sys::path::native(RelativeHTMLPath, sys::path::Style::posix); + sys::path::native(RelativeRootPath, sys::path::Style::posix); auto *SSA = StylesheetArr.getAsArray(); SSA->reserve(CDCtx.UserStylesheets.size()); for (const auto &FilePath : CDCtx.UserStylesheets) { - SmallString<128> StylesheetPath = RelativeHTMLPath; + SmallString<128> StylesheetPath = RelativeRootPath; sys::path::append(StylesheetPath, sys::path::Style::posix, sys::path::filename(FilePath)); SSA->emplace_back(StylesheetPath); @@ -236,7 +101,7 @@ static Error setupTemplateValue(const ClangDocContext &CDCtx, json::Value &V, auto *SCA = ScriptArr.getAsArray(); SCA->reserve(CDCtx.JsScripts.size()); for (auto Script : CDCtx.JsScripts) { - SmallString<128> JsPath = RelativeHTMLPath; + SmallString<128> JsPath = RelativeRootPath; sys::path::append(JsPath, sys::path::Style::posix, sys::path::filename(Script)); SCA->emplace_back(JsPath); @@ -245,31 +110,18 @@ static Error setupTemplateValue(const ClangDocContext &CDCtx, json::Value &V, return Error::success(); } -static Error generateDocForJSON(json::Value &JSON, StringRef Filename, - StringRef Path, raw_fd_ostream &OS, - const ClangDocContext &CDCtx, - StringRef HTMLRootPath) { - auto StrValue = (*JSON.getAsObject())["InfoType"]; - if (StrValue.kind() != json::Value::Kind::String) - return createStringError("JSON file '%s' does not contain key: 'InfoType'.", - Filename.str().c_str()); - auto ObjTypeStr = StrValue.getAsString(); - if (!ObjTypeStr.has_value()) - return createStringError( - "JSON file '%s' does not contain 'InfoType' field as a string.", - Filename.str().c_str()); - - SmallString<128> PathVec(Path); - // Remove filename, or else the relative path will have an extra "../" - sys::path::remove_filename(PathVec); - auto RelativeHTMLPath = computeRelativePath(HTMLRootPath, PathVec); - if (ObjTypeStr.value() == "namespace") { - if (auto Err = setupTemplateValue(CDCtx, JSON, RelativeHTMLPath)) +Error MustacheHTMLGenerator::generateDocForJSON(json::Value &JSON, + raw_fd_ostream &OS, + const ClangDocContext &CDCtx, + StringRef ObjTypeStr, + StringRef RelativeRootPath) { + if (ObjTypeStr == "namespace") { + if (auto Err = setupTemplateResources(CDCtx, JSON, RelativeRootPath)) return Err; assert(NamespaceTemplate && "NamespaceTemplate is nullptr."); NamespaceTemplate->render(JSON, OS); - } else if (ObjTypeStr.value() == "record") { - if (auto Err = setupTemplateValue(CDCtx, JSON, RelativeHTMLPath)) + } else if (ObjTypeStr == "record") { + if (auto Err = setupTemplateResources(CDCtx, JSON, RelativeRootPath)) return Err; assert(RecordTemplate && "RecordTemplate is nullptr."); RecordTemplate->render(JSON, OS); @@ -306,6 +158,13 @@ Error MustacheHTMLGenerator::createResources(ClangDocContext &CDCtx) { return Error::success(); } +Error MustacheHTMLGenerator::generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) { + return MustacheGenerator::generateDocumentation(RootDir, std::move(Infos), + CDCtx, "html"); +} + const char *MustacheHTMLGenerator::Format = "mustache"; static GeneratorRegistry::Add diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp index e28a7ecd5175f..97c599a3f605c 100644 --- a/clang-tools-extra/clang-doc/JSONGenerator.cpp +++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp @@ -12,9 +12,10 @@ class JSONGenerator : public Generator { public: static const char *Format; - Error generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) override; + Error generateDocumentation(StringRef RootDir, + llvm::StringMap> Infos, + const ClangDocContext &CDCtx, + std::string DirName) override; Error createResources(ClangDocContext &CDCtx) override; Error generateDocForInfo(Info *I, llvm::raw_ostream &OS, const ClangDocContext &CDCtx) override; @@ -596,9 +597,9 @@ static SmallString<16> determineFileName(Info *I, SmallString<128> &Path) { return FileName; } -Error JSONGenerator::generateDocs( +Error JSONGenerator::generateDocumentation( StringRef RootDir, llvm::StringMap> Infos, - const ClangDocContext &CDCtx) { + const ClangDocContext &CDCtx, std::string DirName) { StringSet<> CreatedDirs; StringMap> FileToInfos; for (const auto &Group : Infos) { diff --git a/clang-tools-extra/clang-doc/MDGenerator.cpp b/clang-tools-extra/clang-doc/MDGenerator.cpp index 6f16f5bd2f528..fcb75af80f9e9 100644 --- a/clang-tools-extra/clang-doc/MDGenerator.cpp +++ b/clang-tools-extra/clang-doc/MDGenerator.cpp @@ -398,9 +398,9 @@ class MDGenerator : public Generator { public: static const char *Format; - llvm::Error generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) override; + llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) override; llvm::Error createResources(ClangDocContext &CDCtx) override; llvm::Error generateDocForInfo(Info *I, llvm::raw_ostream &OS, const ClangDocContext &CDCtx) override; @@ -408,10 +408,9 @@ class MDGenerator : public Generator { const char *MDGenerator::Format = "md"; -llvm::Error -MDGenerator::generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) { +llvm::Error MDGenerator::generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) { // Track which directories we already tried to create. llvm::StringSet<> CreatedDirs; diff --git a/clang-tools-extra/clang-doc/YAMLGenerator.cpp b/clang-tools-extra/clang-doc/YAMLGenerator.cpp index eeccdd804b669..ce4ef58e582e5 100644 --- a/clang-tools-extra/clang-doc/YAMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/YAMLGenerator.cpp @@ -347,19 +347,18 @@ class YAMLGenerator : public Generator { public: static const char *Format; - llvm::Error generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) override; + llvm::Error generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) override; llvm::Error generateDocForInfo(Info *I, llvm::raw_ostream &OS, const ClangDocContext &CDCtx) override; }; const char *YAMLGenerator::Format = "yaml"; -llvm::Error -YAMLGenerator::generateDocs(StringRef RootDir, - llvm::StringMap> Infos, - const ClangDocContext &CDCtx) { +llvm::Error YAMLGenerator::generateDocumentation( + StringRef RootDir, llvm::StringMap> Infos, + const ClangDocContext &CDCtx, std::string DirName) { for (const auto &Group : Infos) { doc::Info *Info = Group.getValue().get(); diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp index 3bb67baf65739..c86fd720d996b 100644 --- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp +++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp @@ -438,7 +438,8 @@ Example usage for a project using a compile commands database: // Run the generator. llvm::outs() << "Generating docs...\n"; - ExitOnErr(G->generateDocs(OutDirectory, std::move(USRToInfo), CDCtx)); + ExitOnErr( + G->generateDocumentation(OutDirectory, std::move(USRToInfo), CDCtx)); llvm::outs() << "Generating assets for docs...\n"; ExitOnErr(G->createResources(CDCtx)); llvm::timeTraceProfilerEnd(); From c9f573463ebd7b4e46da4877802f2364f700e54a Mon Sep 17 00:00:00 2001 From: Kai Nacke Date: Wed, 19 Nov 2025 16:05:00 -0500 Subject: [PATCH 25/48] [Analysis] Move TargetLibraryInfo data to TableGen (#165009) The collection of library function names in TargetLibraryInfo faces similar challenges as RuntimeLibCalls in the IR component. The number of function names is large, there are numerous customizations based on the triple (including alternate names), and there is a lot of replicated data in the signature table. The ultimate goal would be to capture all lbrary function related information in a .td file. This PR brings the current .def file to TableGen, almost as a 1:1 replacement. However, there are some improvements which are not possible in the current implementation: - the function names are now stored as a long string together with an offset table. - the table of signatures is now deduplicated, using an offset table for access. The size of the object file decreases about 34kB with these changes. The hash table of all function names is still constructed dynamically. A static table like for RuntimeLibCalls is the next logical step. The main motivation for this change is that I have to add a large number of custom names for z/OS (like in RuntimeLibCalls.td), and the current infrastructur does not support this very well. --- llvm/include/llvm/Analysis/CMakeLists.txt | 3 + .../llvm/Analysis/TargetLibraryInfo.def | 2728 ----------------- .../include/llvm/Analysis/TargetLibraryInfo.h | 24 +- .../llvm/Analysis/TargetLibraryInfo.td | 1697 ++++++++++ .../llvm/Analysis/TargetLibraryInfoImpl.td | 44 + llvm/include/llvm/CMakeLists.txt | 1 + .../llvm/TableGen/StringToOffsetTable.h | 7 +- llvm/lib/Analysis/BranchProbabilityInfo.cpp | 2 +- llvm/lib/Analysis/CMakeLists.txt | 1 + llvm/lib/Analysis/TargetLibraryInfo.cpp | 70 +- llvm/lib/LTO/UpdateCompilerUsed.cpp | 4 +- llvm/lib/TableGen/StringToOffsetTable.cpp | 3 +- .../NumericalStabilitySanitizer.cpp | 2 +- .../lib/Transforms/Utils/SimplifyLibCalls.cpp | 2 +- llvm/test/TableGen/TargetLibraryInfo.td | 115 + .../llvm-tli-checker/llvm-tli-checker.cpp | 14 +- .../Analysis/TargetLibraryInfoTest.cpp | 4 +- llvm/utils/TableGen/Basic/CMakeLists.txt | 1 + .../Basic/TargetLibraryInfoEmitter.cpp | 186 ++ 19 files changed, 2101 insertions(+), 2807 deletions(-) create mode 100644 llvm/include/llvm/Analysis/CMakeLists.txt delete mode 100644 llvm/include/llvm/Analysis/TargetLibraryInfo.def create mode 100644 llvm/include/llvm/Analysis/TargetLibraryInfo.td create mode 100644 llvm/include/llvm/Analysis/TargetLibraryInfoImpl.td create mode 100644 llvm/test/TableGen/TargetLibraryInfo.td create mode 100644 llvm/utils/TableGen/Basic/TargetLibraryInfoEmitter.cpp diff --git a/llvm/include/llvm/Analysis/CMakeLists.txt b/llvm/include/llvm/Analysis/CMakeLists.txt new file mode 100644 index 0000000000000..036f7ff00ce86 --- /dev/null +++ b/llvm/include/llvm/Analysis/CMakeLists.txt @@ -0,0 +1,3 @@ +set(LLVM_TARGET_DEFINITIONS TargetLibraryInfo.td) +tablegen(LLVM TargetLibraryInfo.inc -gen-target-library-info) +add_public_tablegen_target(analysis_gen) diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.def b/llvm/include/llvm/Analysis/TargetLibraryInfo.def deleted file mode 100644 index 76b89dcb3f25d..0000000000000 --- a/llvm/include/llvm/Analysis/TargetLibraryInfo.def +++ /dev/null @@ -1,2728 +0,0 @@ -//===-- TargetLibraryInfo.def - Library information -------------*- 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 -// -//===----------------------------------------------------------------------===// - -// This .def file will either fill in the enum definition or fill in the -// string representation array definition for TargetLibraryInfo. -// Which is defined depends on whether TLI_DEFINE_ENUM is defined or -// TLI_DEFINE_STRING is defined. Only one should be defined at a time. - -// NOTE: The nofree attribute is added to Libfuncs which are not -// listed as free or realloc functions in MemoryBuiltins.cpp -// -// When adding a function which frees memory include the LibFunc -// in lib/Analysis/MemoryBuiltins.cpp "isLibFreeFunction". -// -// When adding a LibFunc which reallocates memory include the LibFunc -// in lib/Analysis/MemoryBuiltins.cpp "AllocationFnData[]". - -#if (defined(TLI_DEFINE_ENUM) + \ - defined(TLI_DEFINE_STRING) + \ - defined(TLI_DEFINE_SIG) != 1) -#error "Must define exactly one of TLI_DEFINE_ENUM, TLI_DEFINE_STRING, or TLI_DEFINE_SIG for TLI .def." -#else -// Exactly one of TLI_DEFINE_ENUM/STRING/SIG is defined. - -#if defined(TLI_DEFINE_ENUM) -#define TLI_DEFINE_ENUM_INTERNAL(enum_variant) LibFunc_##enum_variant, -#define TLI_DEFINE_STRING_INTERNAL(string_repr) -#define TLI_DEFINE_SIG_INTERNAL(...) -#elif defined(TLI_DEFINE_STRING) -#define TLI_DEFINE_ENUM_INTERNAL(enum_variant) -#define TLI_DEFINE_STRING_INTERNAL(string_repr) string_repr, -#define TLI_DEFINE_SIG_INTERNAL(...) -#else -#define TLI_DEFINE_ENUM_INTERNAL(enum_variant) -#define TLI_DEFINE_STRING_INTERNAL(string_repr) -#define TLI_DEFINE_SIG_INTERNAL(...) { __VA_ARGS__ }, -#endif - -/// void *operator new(unsigned int); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_int) -TLI_DEFINE_STRING_INTERNAL("??2@YAPAXI@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int) - -/// void *operator new(unsigned int, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_int_nothrow) -TLI_DEFINE_STRING_INTERNAL("??2@YAPAXIABUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Ptr) - -/// void *operator new(unsigned long long); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_longlong) -TLI_DEFINE_STRING_INTERNAL("??2@YAPEAX_K@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, LLong) - -/// void *operator new(unsigned long long, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_longlong_nothrow) -TLI_DEFINE_STRING_INTERNAL("??2@YAPEAX_KAEBUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, LLong, Ptr) - -/// void operator delete(void*); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr32) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPAX@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete(void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr32_nothrow) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPAXABUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete(void*, unsigned int); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr32_int) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPAXI@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int) - -/// void operator delete(void*); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr64) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPEAX@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete(void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr64_nothrow) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPEAXAEBUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete(void*, unsigned long long); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_ptr64_longlong) -TLI_DEFINE_STRING_INTERNAL("??3@YAXPEAX_K@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, LLong) - -/// void *operator new[](unsigned int); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_array_int) -TLI_DEFINE_STRING_INTERNAL("??_U@YAPAXI@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int) - -/// void *operator new[](unsigned int, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_array_int_nothrow) -TLI_DEFINE_STRING_INTERNAL("??_U@YAPAXIABUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Ptr) - -/// void *operator new[](unsigned long long); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_array_longlong) -TLI_DEFINE_STRING_INTERNAL("??_U@YAPEAX_K@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, LLong) - -/// void *operator new[](unsigned long long, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_new_array_longlong_nothrow) -TLI_DEFINE_STRING_INTERNAL("??_U@YAPEAX_KAEBUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Ptr, LLong, Ptr) - -/// void operator delete[](void*); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr32) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPAX@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete[](void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr32_nothrow) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPAXABUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete[](void*, unsigned int); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr32_int) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPAXI@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int) - -/// void operator delete[](void*); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr64) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPEAX@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete[](void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr64_nothrow) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPEAXAEBUnothrow_t@std@@@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete[](void*, unsigned long long); -TLI_DEFINE_ENUM_INTERNAL(msvc_delete_array_ptr64_longlong) -TLI_DEFINE_STRING_INTERNAL("??_V@YAXPEAX_K@Z") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, LLong) - -/// int _IO_getc(_IO_FILE * __fp); -TLI_DEFINE_ENUM_INTERNAL(under_IO_getc) -TLI_DEFINE_STRING_INTERNAL("_IO_getc") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int _IO_putc(int __c, _IO_FILE * __fp); -TLI_DEFINE_ENUM_INTERNAL(under_IO_putc) -TLI_DEFINE_STRING_INTERNAL("_IO_putc") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// void operator delete[](void*); -TLI_DEFINE_ENUM_INTERNAL(ZdaPv) -TLI_DEFINE_STRING_INTERNAL("_ZdaPv") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete[](void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete[](void*, std::align_val_t); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, IntPlus) - -/// void operator delete[](void*, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZdaPvSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, IntPlus, Ptr) - -/// void operator delete[](void*, unsigned int); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvj) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvj") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int) - -/// void operator delete[](void*, unsigned int, std::align_val_t); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvjSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvjSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int, Int) - -/// void operator delete[](void*, unsigned long); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvm) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvm") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Long) - -/// void operator delete[](void*, unsigned long, std::align_val_t); -TLI_DEFINE_ENUM_INTERNAL(ZdaPvmSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdaPvmSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Long, Long) - -/// void operator delete(void*); -TLI_DEFINE_ENUM_INTERNAL(ZdlPv) -TLI_DEFINE_STRING_INTERNAL("_ZdlPv") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void operator delete(void*, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZdlPvRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// void operator delete(void*, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZdlPvSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, IntPlus) - -/// void operator delete(void*, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZdlPvSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, IntPlus, Ptr) - -/// void operator delete(void*, unsigned int); -TLI_DEFINE_ENUM_INTERNAL(ZdlPvj) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvj") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int) - -/// void operator delete(void*, unsigned int, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZdlPvjSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvjSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Int, Int) - -/// void operator delete(void*, unsigned long); -TLI_DEFINE_ENUM_INTERNAL(ZdlPvm) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvm") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Long) - -/// void operator delete(void*, unsigned long, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZdlPvmSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZdlPvmSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Long, Long) - -/// void *operator new[](unsigned int); -TLI_DEFINE_ENUM_INTERNAL(Znaj) -TLI_DEFINE_STRING_INTERNAL("_Znaj") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int) - -/// void *operator new[](unsigned int, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZnajRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnajRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Ptr) - -/// void *operator new[](unsigned int, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZnajSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZnajSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Int) - -/// void *operator new[](unsigned int, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZnajSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnajSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Int, Ptr) - -/// void *operator new[](unsigned long); -TLI_DEFINE_ENUM_INTERNAL(Znam) -TLI_DEFINE_STRING_INTERNAL("_Znam") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long) - -/// void *operator new[](unsigned long, __hot_cold_t) -/// Currently this and other operator new interfaces that take a __hot_cold_t -/// hint are supported by the open source version of tcmalloc, see: -/// https://github.com/google/tcmalloc/blob/master/tcmalloc/new_extension.h -/// and for the definition of the __hot_cold_t parameter see: -/// https://github.com/google/tcmalloc/blob/master/tcmalloc/malloc_extension.h -TLI_DEFINE_ENUM_INTERNAL(Znam12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_Znam12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Bool) - -/// void *operator new[](unsigned long, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZnamRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Ptr) - -/// void *operator new[](unsigned long, const std::nothrow_t&, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnamRKSt9nothrow_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamRKSt9nothrow_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Ptr, Bool) - -/// void *operator new[](unsigned long, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZnamSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long) - -/// void *operator new[](unsigned long, std::align_val_t, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnamSt11align_val_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamSt11align_val_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Bool) - -/// void *operator new[](unsigned long, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZnamSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Ptr) - -/// void *operator new[](unsigned long, std::align_val_t, const std::nothrow_t&, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Ptr, Bool) - -/// void *operator new(unsigned int); -TLI_DEFINE_ENUM_INTERNAL(Znwj) -TLI_DEFINE_STRING_INTERNAL("_Znwj") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int) - -/// void *operator new(unsigned int, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZnwjRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwjRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Ptr) - -/// void *operator new(unsigned int, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZnwjSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwjSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Int) - -/// void *operator new(unsigned int, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZnwjSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwjSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Int, Ptr) - -/// void *operator new(unsigned long); -TLI_DEFINE_ENUM_INTERNAL(Znwm) -TLI_DEFINE_STRING_INTERNAL("_Znwm") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long) - -/// void *operator new(unsigned long, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(Znwm12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_Znwm12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Bool) - -/// void *operator new(unsigned long, const std::nothrow_t&); -TLI_DEFINE_ENUM_INTERNAL(ZnwmRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Ptr) - -/// void *operator new(unsigned long, const std::nothrow_t&, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnwmRKSt9nothrow_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmRKSt9nothrow_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Ptr, Bool) - -/// void *operator new(unsigned long, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(ZnwmSt11align_val_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmSt11align_val_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long) - -/// void *operator new(unsigned long, std::align_val_t, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnwmSt11align_val_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmSt11align_val_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Bool) - -/// void *operator new(unsigned long, std::align_val_t, const std::nothrow_t&) -TLI_DEFINE_ENUM_INTERNAL(ZnwmSt11align_val_tRKSt9nothrow_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmSt11align_val_tRKSt9nothrow_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Ptr) - -/// void *operator new(unsigned long, std::align_val_t, const std::nothrow_t&, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t) -TLI_DEFINE_STRING_INTERNAL("_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t") -TLI_DEFINE_SIG_INTERNAL(Ptr, Long, Long, Ptr, Bool) - -/// The following are variants of operator new which return the actual size -/// reserved by the allocator proposed in P0901R5 (Size feedback in operator new). -/// https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0901r5.html -/// They are implemented by tcmalloc, see source at -/// https://github.com/google/tcmalloc/blob/master/tcmalloc/malloc_extension.h - -/// __sized_ptr_t __size_returning_new(size_t size) -TLI_DEFINE_ENUM_INTERNAL(size_returning_new) -TLI_DEFINE_STRING_INTERNAL("__size_returning_new") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// __sized_ptr_t __size_returning_new_hot_cold(size_t, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(size_returning_new_hot_cold) -TLI_DEFINE_STRING_INTERNAL("__size_returning_new_hot_cold") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// __sized_ptr_t __size_returning_new_aligned(size_t, std::align_val_t) -TLI_DEFINE_ENUM_INTERNAL(size_returning_new_aligned) -TLI_DEFINE_STRING_INTERNAL("__size_returning_new_aligned") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// __sized_ptr_t __size_returning_new_aligned(size_t, std::align_val_t, __hot_cold_t) -TLI_DEFINE_ENUM_INTERNAL(size_returning_new_aligned_hot_cold) -TLI_DEFINE_STRING_INTERNAL("__size_returning_new_aligned_hot_cold") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// double __acos_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(acos_finite) -TLI_DEFINE_STRING_INTERNAL("__acos_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __acosf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(acosf_finite) -TLI_DEFINE_STRING_INTERNAL("__acosf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double __acosh_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(acosh_finite) -TLI_DEFINE_STRING_INTERNAL("__acosh_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __acoshf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(acoshf_finite) -TLI_DEFINE_STRING_INTERNAL("__acoshf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __acoshl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(acoshl_finite) -TLI_DEFINE_STRING_INTERNAL("__acoshl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double __acosl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(acosl_finite) -TLI_DEFINE_STRING_INTERNAL("__acosl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __asin_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(asin_finite) -TLI_DEFINE_STRING_INTERNAL("__asin_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __asinf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(asinf_finite) -TLI_DEFINE_STRING_INTERNAL("__asinf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __asinl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(asinl_finite) -TLI_DEFINE_STRING_INTERNAL("__asinl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double atan2_finite(double y, double x); -TLI_DEFINE_ENUM_INTERNAL(atan2_finite) -TLI_DEFINE_STRING_INTERNAL("__atan2_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float atan2f_finite(float y, float x); -TLI_DEFINE_ENUM_INTERNAL(atan2f_finite) -TLI_DEFINE_STRING_INTERNAL("__atan2f_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double atan2l_finite(long double y, long double x); -TLI_DEFINE_ENUM_INTERNAL(atan2l_finite) -TLI_DEFINE_STRING_INTERNAL("__atan2l_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// double __atanh_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(atanh_finite) -TLI_DEFINE_STRING_INTERNAL("__atanh_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __atanhf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(atanhf_finite) -TLI_DEFINE_STRING_INTERNAL("__atanhf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __atanhl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(atanhl_finite) -TLI_DEFINE_STRING_INTERNAL("__atanhl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// void __atomic_load(size_t size, void *mptr, void *vptr, int smodel); -TLI_DEFINE_ENUM_INTERNAL(atomic_load) -TLI_DEFINE_STRING_INTERNAL("__atomic_load") -TLI_DEFINE_SIG_INTERNAL(Void, SizeT, Ptr, Ptr, Int) - -/// void __atomic_store(size_t size, void *mptr, void *vptr, int smodel); -TLI_DEFINE_ENUM_INTERNAL(atomic_store) -TLI_DEFINE_STRING_INTERNAL("__atomic_store") -TLI_DEFINE_SIG_INTERNAL(Void, SizeT, Ptr, Ptr, Int) - -/// double __cosh_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(cosh_finite) -TLI_DEFINE_STRING_INTERNAL("__cosh_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __coshf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(coshf_finite) -TLI_DEFINE_STRING_INTERNAL("__coshf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __coshl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(coshl_finite) -TLI_DEFINE_STRING_INTERNAL("__coshl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __cospi(double x); -TLI_DEFINE_ENUM_INTERNAL(cospi) -TLI_DEFINE_STRING_INTERNAL("__cospi") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __cospif(float x); -TLI_DEFINE_ENUM_INTERNAL(cospif) -TLI_DEFINE_STRING_INTERNAL("__cospif") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// int __cxa_atexit(void (*f)(void *), void *p, void *d); -TLI_DEFINE_ENUM_INTERNAL(cxa_atexit) -TLI_DEFINE_STRING_INTERNAL("__cxa_atexit") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int atexit(void (*f)(void)); -TLI_DEFINE_ENUM_INTERNAL(atexit) -TLI_DEFINE_STRING_INTERNAL("atexit") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// void abort(void) -TLI_DEFINE_ENUM_INTERNAL(abort) -TLI_DEFINE_STRING_INTERNAL("abort") -TLI_DEFINE_SIG_INTERNAL(Void) - -/// void exit(int) -TLI_DEFINE_ENUM_INTERNAL(exit) -TLI_DEFINE_STRING_INTERNAL("exit") -TLI_DEFINE_SIG_INTERNAL(Void, Int) - -/// void _Exit(int) -TLI_DEFINE_ENUM_INTERNAL(Exit) -TLI_DEFINE_STRING_INTERNAL("_Exit") -TLI_DEFINE_SIG_INTERNAL(Void, Int) - -/// void std::terminate(); -TLI_DEFINE_ENUM_INTERNAL(terminate) -TLI_DEFINE_STRING_INTERNAL("_ZSt9terminatev") -TLI_DEFINE_SIG_INTERNAL(Void) - -/// void __cxa_throw(void *, void *, void (*)(void *)); -TLI_DEFINE_ENUM_INTERNAL(cxa_throw) -TLI_DEFINE_STRING_INTERNAL("__cxa_throw") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr, Ptr) - -/// void __cxa_guard_abort(guard_t *guard); -/// guard_t is int64_t in Itanium ABI or int32_t on ARM eabi. -TLI_DEFINE_ENUM_INTERNAL(cxa_guard_abort) -TLI_DEFINE_STRING_INTERNAL("__cxa_guard_abort") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// int __cxa_guard_acquire(guard_t *guard); -TLI_DEFINE_ENUM_INTERNAL(cxa_guard_acquire) -TLI_DEFINE_STRING_INTERNAL("__cxa_guard_acquire") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// void __cxa_guard_release(guard_t *guard); -TLI_DEFINE_ENUM_INTERNAL(cxa_guard_release) -TLI_DEFINE_STRING_INTERNAL("__cxa_guard_release") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// double __exp10_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(exp10_finite) -TLI_DEFINE_STRING_INTERNAL("__exp10_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __exp10f_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(exp10f_finite) -TLI_DEFINE_STRING_INTERNAL("__exp10f_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __exp10l_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(exp10l_finite) -TLI_DEFINE_STRING_INTERNAL("__exp10l_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __exp2_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(exp2_finite) -TLI_DEFINE_STRING_INTERNAL("__exp2_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __exp2f_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(exp2f_finite) -TLI_DEFINE_STRING_INTERNAL("__exp2f_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __exp2l_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(exp2l_finite) -TLI_DEFINE_STRING_INTERNAL("__exp2l_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __exp_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(exp_finite) -TLI_DEFINE_STRING_INTERNAL("__exp_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __expf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(expf_finite) -TLI_DEFINE_STRING_INTERNAL("__expf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __expl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(expl_finite) -TLI_DEFINE_STRING_INTERNAL("__expl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int __isoc99_scanf (const char *format, ...) -TLI_DEFINE_ENUM_INTERNAL(dunder_isoc99_scanf) -TLI_DEFINE_STRING_INTERNAL("__isoc99_scanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ellip) - -/// int __isoc99_sscanf(const char *s, const char *format, ...) -TLI_DEFINE_ENUM_INTERNAL(dunder_isoc99_sscanf) -TLI_DEFINE_STRING_INTERNAL("__isoc99_sscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// void* __kmpc_alloc_shared(size_t nbyte); -TLI_DEFINE_ENUM_INTERNAL(__kmpc_alloc_shared) -TLI_DEFINE_STRING_INTERNAL("__kmpc_alloc_shared") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT) - -/// void __kmpc_free_shared(void *ptr, size_t nbyte); -TLI_DEFINE_ENUM_INTERNAL(__kmpc_free_shared) -TLI_DEFINE_STRING_INTERNAL("__kmpc_free_shared") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, SizeT) - -/// double __log10_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(log10_finite) -TLI_DEFINE_STRING_INTERNAL("__log10_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __log10f_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(log10f_finite) -TLI_DEFINE_STRING_INTERNAL("__log10f_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __log10l_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(log10l_finite) -TLI_DEFINE_STRING_INTERNAL("__log10l_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __log2_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(log2_finite) -TLI_DEFINE_STRING_INTERNAL("__log2_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __log2f_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(log2f_finite) -TLI_DEFINE_STRING_INTERNAL("__log2f_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __log2l_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(log2l_finite) -TLI_DEFINE_STRING_INTERNAL("__log2l_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __log_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(log_finite) -TLI_DEFINE_STRING_INTERNAL("__log_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __logf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(logf_finite) -TLI_DEFINE_STRING_INTERNAL("__logf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __logl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(logl_finite) -TLI_DEFINE_STRING_INTERNAL("__logl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// void *__memccpy_chk(void *dst, const void *src, int c, size_t n, -/// size_t dstsize) -TLI_DEFINE_ENUM_INTERNAL(memccpy_chk) -TLI_DEFINE_STRING_INTERNAL("__memccpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, Int, SizeT, SizeT) - -/// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(memcpy_chk) -TLI_DEFINE_STRING_INTERNAL("__memcpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// void *__memmove_chk(void *s1, const void *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(memmove_chk) -TLI_DEFINE_STRING_INTERNAL("__memmove_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// void *__mempcpy_chk(void *s1, const void *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(mempcpy_chk) -TLI_DEFINE_STRING_INTERNAL("__mempcpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// void *__memset_chk(void *s, int v, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(memset_chk) -TLI_DEFINE_STRING_INTERNAL("__memset_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, SizeT, SizeT) - -// int __nvvm_reflect(const char *) -TLI_DEFINE_ENUM_INTERNAL(nvvm_reflect) -TLI_DEFINE_STRING_INTERNAL("__nvvm_reflect") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// double __pow_finite(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(pow_finite) -TLI_DEFINE_STRING_INTERNAL("__pow_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float _powf_finite(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(powf_finite) -TLI_DEFINE_STRING_INTERNAL("__powf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double __powl_finite(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(powl_finite) -TLI_DEFINE_STRING_INTERNAL("__powl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// double __sincospi_stret(double x); -TLI_DEFINE_ENUM_INTERNAL(sincospi_stret) -TLI_DEFINE_STRING_INTERNAL("__sincospi_stret") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// float __sincospif_stret(float x); -TLI_DEFINE_ENUM_INTERNAL(sincospif_stret) -TLI_DEFINE_STRING_INTERNAL("__sincospif_stret") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// double __sinh_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(sinh_finite) -TLI_DEFINE_STRING_INTERNAL("__sinh_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float _sinhf_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(sinhf_finite) -TLI_DEFINE_STRING_INTERNAL("__sinhf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __sinhl_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(sinhl_finite) -TLI_DEFINE_STRING_INTERNAL("__sinhl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double __sinpi(double x); -TLI_DEFINE_ENUM_INTERNAL(sinpi) -TLI_DEFINE_STRING_INTERNAL("__sinpi") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __sinpif(float x); -TLI_DEFINE_ENUM_INTERNAL(sinpif) -TLI_DEFINE_STRING_INTERNAL("__sinpif") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// int __small_fprintf(FILE *stream, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(small_fprintf) -TLI_DEFINE_STRING_INTERNAL("__small_fprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int __small_printf(const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(small_printf) -TLI_DEFINE_STRING_INTERNAL("__small_printf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ellip) - -/// int __small_sprintf(char *str, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(small_sprintf) -TLI_DEFINE_STRING_INTERNAL("__small_sprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int __snprintf_chk(char *s, size_t n, int flags, size_t slen, -/// const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(snprintf_chk) -TLI_DEFINE_STRING_INTERNAL("__snprintf_chk") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT, Int, SizeT, Ptr, Ellip) - -/// int __sprintf_chk(char *str, int flags, size_t str_len, -/// const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(sprintf_chk) -TLI_DEFINE_STRING_INTERNAL("__sprintf_chk") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int, SizeT, Ptr, Ellip) - -/// double __sqrt_finite(double x); -TLI_DEFINE_ENUM_INTERNAL(sqrt_finite) -TLI_DEFINE_STRING_INTERNAL("__sqrt_finite") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float __sqrt_finite(float x); -TLI_DEFINE_ENUM_INTERNAL(sqrtf_finite) -TLI_DEFINE_STRING_INTERNAL("__sqrtf_finite") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double __sqrt_finite(long double x); -TLI_DEFINE_ENUM_INTERNAL(sqrtl_finite) -TLI_DEFINE_STRING_INTERNAL("__sqrtl_finite") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// char *__stpcpy_chk(char *s1, const char *s2, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(stpcpy_chk) -TLI_DEFINE_STRING_INTERNAL("__stpcpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// char *__stpncpy_chk(char *s1, const char *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(stpncpy_chk) -TLI_DEFINE_STRING_INTERNAL("__stpncpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// char *__strcat_chk(char *s1, const char *s2, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(strcat_chk) -TLI_DEFINE_STRING_INTERNAL("__strcat_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// char *__strcpy_chk(char *s1, const char *s2, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(strcpy_chk) -TLI_DEFINE_STRING_INTERNAL("__strcpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// char * __strdup(const char *s); -TLI_DEFINE_ENUM_INTERNAL(dunder_strdup) -TLI_DEFINE_STRING_INTERNAL("__strdup") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// size_t __strlcat_chk(char *dst, const char *src, size_t size, -/// size_t dstsize); -TLI_DEFINE_ENUM_INTERNAL(strlcat_chk) -TLI_DEFINE_STRING_INTERNAL("__strlcat_chk") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr, SizeT, SizeT) - -/// size_t __strlcpy_chk(char *dst, const char *src, size_t size, -/// size_t dstsize); -TLI_DEFINE_ENUM_INTERNAL(strlcpy_chk) -TLI_DEFINE_STRING_INTERNAL("__strlcpy_chk") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr, SizeT, SizeT) - -/// size_t __strlen_chk(const char *s1, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(strlen_chk) -TLI_DEFINE_STRING_INTERNAL("__strlen_chk") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT) - -/// char *strncat_chk(char *s1, const char *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(strncat_chk) -TLI_DEFINE_STRING_INTERNAL("__strncat_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// char *__strncpy_chk(char *s1, const char *s2, size_t n, size_t s1size); -TLI_DEFINE_ENUM_INTERNAL(strncpy_chk) -TLI_DEFINE_STRING_INTERNAL("__strncpy_chk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT, SizeT) - -/// char *__strndup(const char *s, size_t n); -TLI_DEFINE_ENUM_INTERNAL(dunder_strndup) -TLI_DEFINE_STRING_INTERNAL("__strndup") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT) - -/// char * __strtok_r(char *s, const char *delim, char **save_ptr); -TLI_DEFINE_ENUM_INTERNAL(dunder_strtok_r) -TLI_DEFINE_STRING_INTERNAL("__strtok_r") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, Ptr) - -/// int __vsnprintf_chk(char *s, size_t n, int flags, size_t slen, -/// const char *format, va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vsnprintf_chk) -TLI_DEFINE_STRING_INTERNAL("__vsnprintf_chk") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT, Int, SizeT, Ptr, Ptr) - -/// int __vsprintf_chk(char *s, int flags, size_t slen, const char *format, -/// va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vsprintf_chk) -TLI_DEFINE_STRING_INTERNAL("__vsprintf_chk") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int, SizeT, Ptr, Ptr) - -/// int abs(int j); -TLI_DEFINE_ENUM_INTERNAL(abs) -TLI_DEFINE_STRING_INTERNAL("abs") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int access(const char *path, int amode); -TLI_DEFINE_ENUM_INTERNAL(access) -TLI_DEFINE_STRING_INTERNAL("access") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int) - -/// double acos(double x); -TLI_DEFINE_ENUM_INTERNAL(acos) -TLI_DEFINE_STRING_INTERNAL("acos") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float acosf(float x); -TLI_DEFINE_ENUM_INTERNAL(acosf) -TLI_DEFINE_STRING_INTERNAL("acosf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double acosh(double x); -TLI_DEFINE_ENUM_INTERNAL(acosh) -TLI_DEFINE_STRING_INTERNAL("acosh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float acoshf(float x); -TLI_DEFINE_ENUM_INTERNAL(acoshf) -TLI_DEFINE_STRING_INTERNAL("acoshf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double acoshl(long double x); -TLI_DEFINE_ENUM_INTERNAL(acoshl) -TLI_DEFINE_STRING_INTERNAL("acoshl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double acosl(long double x); -TLI_DEFINE_ENUM_INTERNAL(acosl) -TLI_DEFINE_STRING_INTERNAL("acosl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// void *aligned_alloc(size_t alignment, size_t size); -TLI_DEFINE_ENUM_INTERNAL(aligned_alloc) -TLI_DEFINE_STRING_INTERNAL("aligned_alloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT, SizeT) - -/// double asin(double x); -TLI_DEFINE_ENUM_INTERNAL(asin) -TLI_DEFINE_STRING_INTERNAL("asin") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float asinf(float x); -TLI_DEFINE_ENUM_INTERNAL(asinf) -TLI_DEFINE_STRING_INTERNAL("asinf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double asinh(double x); -TLI_DEFINE_ENUM_INTERNAL(asinh) -TLI_DEFINE_STRING_INTERNAL("asinh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float asinhf(float x); -TLI_DEFINE_ENUM_INTERNAL(asinhf) -TLI_DEFINE_STRING_INTERNAL("asinhf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double asinhl(long double x); -TLI_DEFINE_ENUM_INTERNAL(asinhl) -TLI_DEFINE_STRING_INTERNAL("asinhl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double asinl(long double x); -TLI_DEFINE_ENUM_INTERNAL(asinl) -TLI_DEFINE_STRING_INTERNAL("asinl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double atan(double x); -TLI_DEFINE_ENUM_INTERNAL(atan) -TLI_DEFINE_STRING_INTERNAL("atan") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// double atan2(double y, double x); -TLI_DEFINE_ENUM_INTERNAL(atan2) -TLI_DEFINE_STRING_INTERNAL("atan2") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float atan2f(float y, float x); -TLI_DEFINE_ENUM_INTERNAL(atan2f) -TLI_DEFINE_STRING_INTERNAL("atan2f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double atan2l(long double y, long double x); -TLI_DEFINE_ENUM_INTERNAL(atan2l) -TLI_DEFINE_STRING_INTERNAL("atan2l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// float atanf(float x); -TLI_DEFINE_ENUM_INTERNAL(atanf) -TLI_DEFINE_STRING_INTERNAL("atanf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double atanh(double x); -TLI_DEFINE_ENUM_INTERNAL(atanh) -TLI_DEFINE_STRING_INTERNAL("atanh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float atanhf(float x); -TLI_DEFINE_ENUM_INTERNAL(atanhf) -TLI_DEFINE_STRING_INTERNAL("atanhf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double atanhl(long double x); -TLI_DEFINE_ENUM_INTERNAL(atanhl) -TLI_DEFINE_STRING_INTERNAL("atanhl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double atanl(long double x); -TLI_DEFINE_ENUM_INTERNAL(atanl) -TLI_DEFINE_STRING_INTERNAL("atanl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double atof(const char *str); -TLI_DEFINE_ENUM_INTERNAL(atof) -TLI_DEFINE_STRING_INTERNAL("atof") -TLI_DEFINE_SIG_INTERNAL(Dbl, Ptr) - -/// int atoi(const char *str); -TLI_DEFINE_ENUM_INTERNAL(atoi) -TLI_DEFINE_STRING_INTERNAL("atoi") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// long atol(const char *str); -TLI_DEFINE_ENUM_INTERNAL(atol) -TLI_DEFINE_STRING_INTERNAL("atol") -TLI_DEFINE_SIG_INTERNAL(Long, Ptr) - -/// long long atoll(const char *nptr); -TLI_DEFINE_ENUM_INTERNAL(atoll) -TLI_DEFINE_STRING_INTERNAL("atoll") -TLI_DEFINE_SIG_INTERNAL(LLong, Ptr) - -/// int bcmp(const void *s1, const void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(bcmp) -TLI_DEFINE_STRING_INTERNAL("bcmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, SizeT) - -/// void bcopy(const void *s1, void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(bcopy) -TLI_DEFINE_STRING_INTERNAL("bcopy") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr, SizeT) - -/// void bzero(void *s, size_t n); -TLI_DEFINE_ENUM_INTERNAL(bzero) -TLI_DEFINE_STRING_INTERNAL("bzero") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, SizeT) - -/// double cabs(double complex z) -TLI_DEFINE_ENUM_INTERNAL(cabs) -TLI_DEFINE_STRING_INTERNAL("cabs") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// float cabs(float complex z) -TLI_DEFINE_ENUM_INTERNAL(cabsf) -TLI_DEFINE_STRING_INTERNAL("cabsf") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// long double cabs(long double complex z) -TLI_DEFINE_ENUM_INTERNAL(cabsl) -TLI_DEFINE_STRING_INTERNAL("cabsl") -TLI_DEFINE_SIG_INTERNAL(/* Checked manually. */) - -/// void *calloc(size_t count, size_t size); -TLI_DEFINE_ENUM_INTERNAL(calloc) -TLI_DEFINE_STRING_INTERNAL("calloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT, SizeT) - -/// double cbrt(double x); -TLI_DEFINE_ENUM_INTERNAL(cbrt) -TLI_DEFINE_STRING_INTERNAL("cbrt") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float cbrtf(float x); -TLI_DEFINE_ENUM_INTERNAL(cbrtf) -TLI_DEFINE_STRING_INTERNAL("cbrtf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double cbrtl(long double x); -TLI_DEFINE_ENUM_INTERNAL(cbrtl) -TLI_DEFINE_STRING_INTERNAL("cbrtl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double ceil(double x); -TLI_DEFINE_ENUM_INTERNAL(ceil) -TLI_DEFINE_STRING_INTERNAL("ceil") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float ceilf(float x); -TLI_DEFINE_ENUM_INTERNAL(ceilf) -TLI_DEFINE_STRING_INTERNAL("ceilf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double ceill(long double x); -TLI_DEFINE_ENUM_INTERNAL(ceill) -TLI_DEFINE_STRING_INTERNAL("ceill") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int chmod(const char *path, mode_t mode); -TLI_DEFINE_ENUM_INTERNAL(chmod) -TLI_DEFINE_STRING_INTERNAL("chmod") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, IntX) - -/// int chown(const char *path, uid_t owner, gid_t group); -TLI_DEFINE_ENUM_INTERNAL(chown) -TLI_DEFINE_STRING_INTERNAL("chown") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, IntX, IntX) - -/// void clearerr(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(clearerr) -TLI_DEFINE_STRING_INTERNAL("clearerr") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// int closedir(DIR *dirp); -TLI_DEFINE_ENUM_INTERNAL(closedir) -TLI_DEFINE_STRING_INTERNAL("closedir") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// double copysign(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(copysign) -TLI_DEFINE_STRING_INTERNAL("copysign") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float copysignf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(copysignf) -TLI_DEFINE_STRING_INTERNAL("copysignf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double copysignl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(copysignl) -TLI_DEFINE_STRING_INTERNAL("copysignl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// double cos(double x); -TLI_DEFINE_ENUM_INTERNAL(cos) -TLI_DEFINE_STRING_INTERNAL("cos") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float cosf(float x); -TLI_DEFINE_ENUM_INTERNAL(cosf) -TLI_DEFINE_STRING_INTERNAL("cosf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double cosh(double x); -TLI_DEFINE_ENUM_INTERNAL(cosh) -TLI_DEFINE_STRING_INTERNAL("cosh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float coshf(float x); -TLI_DEFINE_ENUM_INTERNAL(coshf) -TLI_DEFINE_STRING_INTERNAL("coshf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double coshl(long double x); -TLI_DEFINE_ENUM_INTERNAL(coshl) -TLI_DEFINE_STRING_INTERNAL("coshl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double cosl(long double x); -TLI_DEFINE_ENUM_INTERNAL(cosl) -TLI_DEFINE_STRING_INTERNAL("cosl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// char *ctermid(char *s); -TLI_DEFINE_ENUM_INTERNAL(ctermid) -TLI_DEFINE_STRING_INTERNAL("ctermid") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// double erf(double x); -TLI_DEFINE_ENUM_INTERNAL(erf) -TLI_DEFINE_STRING_INTERNAL("erf") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float erff(float x); -TLI_DEFINE_ENUM_INTERNAL(erff) -TLI_DEFINE_STRING_INTERNAL("erff") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double erfl(long double x); -TLI_DEFINE_ENUM_INTERNAL(erfl) -TLI_DEFINE_STRING_INTERNAL("erfl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double tgamma(double x); -TLI_DEFINE_ENUM_INTERNAL(tgamma) -TLI_DEFINE_STRING_INTERNAL("tgamma") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float tgammaf(float x); -TLI_DEFINE_ENUM_INTERNAL(tgammaf) -TLI_DEFINE_STRING_INTERNAL("tgammaf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double tgammal(long double x); -TLI_DEFINE_ENUM_INTERNAL(tgammal) -TLI_DEFINE_STRING_INTERNAL("tgammal") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int execl(const char *path, const char *arg, ...); -TLI_DEFINE_ENUM_INTERNAL(execl) -TLI_DEFINE_STRING_INTERNAL("execl") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int execle(const char *file, const char *arg, ..., char * const envp[]); -TLI_DEFINE_ENUM_INTERNAL(execle) -TLI_DEFINE_STRING_INTERNAL("execle") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int execlp(const char *file, const char *arg, ...); -TLI_DEFINE_ENUM_INTERNAL(execlp) -TLI_DEFINE_STRING_INTERNAL("execlp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int execv(const char *path, char *const argv[]); -TLI_DEFINE_ENUM_INTERNAL(execv) -TLI_DEFINE_STRING_INTERNAL("execv") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int execvP(const char *file, const char *search_path, char *const argv[]); -TLI_DEFINE_ENUM_INTERNAL(execvP) -TLI_DEFINE_STRING_INTERNAL("execvP") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int execve(const char *filename, char *const argv[], char *const envp[]); -TLI_DEFINE_ENUM_INTERNAL(execve) -TLI_DEFINE_STRING_INTERNAL("execve") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int execvp(const char *file, char *const argv[]); -TLI_DEFINE_ENUM_INTERNAL(execvp) -TLI_DEFINE_STRING_INTERNAL("execvp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int execvpe(const char *file, char *const argv[], char *const envp[]); -TLI_DEFINE_ENUM_INTERNAL(execvpe) -TLI_DEFINE_STRING_INTERNAL("execvpe") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// double exp(double x); -TLI_DEFINE_ENUM_INTERNAL(exp) -TLI_DEFINE_STRING_INTERNAL("exp") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// double exp10(double x); -TLI_DEFINE_ENUM_INTERNAL(exp10) -TLI_DEFINE_STRING_INTERNAL("exp10") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float exp10f(float x); -TLI_DEFINE_ENUM_INTERNAL(exp10f) -TLI_DEFINE_STRING_INTERNAL("exp10f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double exp10l(long double x); -TLI_DEFINE_ENUM_INTERNAL(exp10l) -TLI_DEFINE_STRING_INTERNAL("exp10l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double exp2(double x); -TLI_DEFINE_ENUM_INTERNAL(exp2) -TLI_DEFINE_STRING_INTERNAL("exp2") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float exp2f(float x); -TLI_DEFINE_ENUM_INTERNAL(exp2f) -TLI_DEFINE_STRING_INTERNAL("exp2f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double exp2l(long double x); -TLI_DEFINE_ENUM_INTERNAL(exp2l) -TLI_DEFINE_STRING_INTERNAL("exp2l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// float expf(float x); -TLI_DEFINE_ENUM_INTERNAL(expf) -TLI_DEFINE_STRING_INTERNAL("expf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double expl(long double x); -TLI_DEFINE_ENUM_INTERNAL(expl) -TLI_DEFINE_STRING_INTERNAL("expl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double expm1(double x); -TLI_DEFINE_ENUM_INTERNAL(expm1) -TLI_DEFINE_STRING_INTERNAL("expm1") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float expm1f(float x); -TLI_DEFINE_ENUM_INTERNAL(expm1f) -TLI_DEFINE_STRING_INTERNAL("expm1f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double expm1l(long double x); -TLI_DEFINE_ENUM_INTERNAL(expm1l) -TLI_DEFINE_STRING_INTERNAL("expm1l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double fabs(double x); -TLI_DEFINE_ENUM_INTERNAL(fabs) -TLI_DEFINE_STRING_INTERNAL("fabs") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float fabsf(float x); -TLI_DEFINE_ENUM_INTERNAL(fabsf) -TLI_DEFINE_STRING_INTERNAL("fabsf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double fabsl(long double x); -TLI_DEFINE_ENUM_INTERNAL(fabsl) -TLI_DEFINE_STRING_INTERNAL("fabsl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int fclose(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fclose) -TLI_DEFINE_STRING_INTERNAL("fclose") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// FILE *fdopen(int fildes, const char *mode); -TLI_DEFINE_ENUM_INTERNAL(fdopen) -TLI_DEFINE_STRING_INTERNAL("fdopen") -TLI_DEFINE_SIG_INTERNAL(Ptr, Int, Ptr) - -/// int feof(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(feof) -TLI_DEFINE_STRING_INTERNAL("feof") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int ferror(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(ferror) -TLI_DEFINE_STRING_INTERNAL("ferror") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int fflush(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fflush) -TLI_DEFINE_STRING_INTERNAL("fflush") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int ffs(int i); -TLI_DEFINE_ENUM_INTERNAL(ffs) -TLI_DEFINE_STRING_INTERNAL("ffs") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int ffsl(long int i); -TLI_DEFINE_ENUM_INTERNAL(ffsl) -TLI_DEFINE_STRING_INTERNAL("ffsl") -TLI_DEFINE_SIG_INTERNAL(Int, Long) - -/// int ffsll(long long int i); -TLI_DEFINE_ENUM_INTERNAL(ffsll) -TLI_DEFINE_STRING_INTERNAL("ffsll") -TLI_DEFINE_SIG_INTERNAL(Int, LLong) - -/// int fgetc(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fgetc) -TLI_DEFINE_STRING_INTERNAL("fgetc") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int fgetc_unlocked(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fgetc_unlocked) -TLI_DEFINE_STRING_INTERNAL("fgetc_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int fgetpos(FILE *stream, fpos_t *pos); -TLI_DEFINE_ENUM_INTERNAL(fgetpos) -TLI_DEFINE_STRING_INTERNAL("fgetpos") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// char *fgets(char *s, int n, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fgets) -TLI_DEFINE_STRING_INTERNAL("fgets") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, Ptr) - -/// char *fgets_unlocked(char *s, int n, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fgets_unlocked) -TLI_DEFINE_STRING_INTERNAL("fgets_unlocked") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, Ptr) - -/// int fileno(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fileno) -TLI_DEFINE_STRING_INTERNAL("fileno") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int fiprintf(FILE *stream, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(fiprintf) -TLI_DEFINE_STRING_INTERNAL("fiprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// void flockfile(FILE *file); -TLI_DEFINE_ENUM_INTERNAL(flockfile) -TLI_DEFINE_STRING_INTERNAL("flockfile") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// double floor(double x); -TLI_DEFINE_ENUM_INTERNAL(floor) -TLI_DEFINE_STRING_INTERNAL("floor") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float floorf(float x); -TLI_DEFINE_ENUM_INTERNAL(floorf) -TLI_DEFINE_STRING_INTERNAL("floorf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double floorl(long double x); -TLI_DEFINE_ENUM_INTERNAL(floorl) -TLI_DEFINE_STRING_INTERNAL("floorl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int fls(int i); -TLI_DEFINE_ENUM_INTERNAL(fls) -TLI_DEFINE_STRING_INTERNAL("fls") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int flsl(long int i); -TLI_DEFINE_ENUM_INTERNAL(flsl) -TLI_DEFINE_STRING_INTERNAL("flsl") -TLI_DEFINE_SIG_INTERNAL(Int, Long) - -/// int flsll(long long int i); -TLI_DEFINE_ENUM_INTERNAL(flsll) -TLI_DEFINE_STRING_INTERNAL("flsll") -TLI_DEFINE_SIG_INTERNAL(Int, LLong) - -// Calls to fmax and fmin library functions expand to the llvm.maxnnum and -// llvm.minnum intrinsics with the correct parameter types for the arguments -// (all types must match). -/// double fmax(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fmax) -TLI_DEFINE_STRING_INTERNAL("fmax") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// float fmaxf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fmaxf) -TLI_DEFINE_STRING_INTERNAL("fmaxf") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// long double fmaxl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fmaxl) -TLI_DEFINE_STRING_INTERNAL("fmaxl") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// double fmin(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fmin) -TLI_DEFINE_STRING_INTERNAL("fmin") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// float fminf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fminf) -TLI_DEFINE_STRING_INTERNAL("fminf") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// long double fminl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fminl) -TLI_DEFINE_STRING_INTERNAL("fminl") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -// Calls to fmaximum_num and fminimum_num library functions expand to the llvm.maximumnum and -// llvm.minimumnum intrinsics with the correct parameter types for the arguments -// (all types must match). -/// double fmaximum_num(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fmaximum_num) -TLI_DEFINE_STRING_INTERNAL("fmaximum_num") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// float fmaximum_numf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fmaximum_numf) -TLI_DEFINE_STRING_INTERNAL("fmaximum_numf") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// long double fmaximum_numl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fmaximum_numl) -TLI_DEFINE_STRING_INTERNAL("fmaximum_numl") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// double fminimum_num(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fminimum_num) -TLI_DEFINE_STRING_INTERNAL("fminimum_num") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// float fminimum_numf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fminimum_numf) -TLI_DEFINE_STRING_INTERNAL("fminimum_numf") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// long double fminimum_numl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fminimum_numl) -TLI_DEFINE_STRING_INTERNAL("fminimum_numl") -TLI_DEFINE_SIG_INTERNAL(Floating, Same, Same) - -/// double fmod(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fmod) -TLI_DEFINE_STRING_INTERNAL("fmod") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float fmodf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fmodf) -TLI_DEFINE_STRING_INTERNAL("fmodf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double fmodl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fmodl) -TLI_DEFINE_STRING_INTERNAL("fmodl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// FILE *fopen(const char *filename, const char *mode); -TLI_DEFINE_ENUM_INTERNAL(fopen) -TLI_DEFINE_STRING_INTERNAL("fopen") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// FILE *fopen64(const char *filename, const char *opentype) -TLI_DEFINE_ENUM_INTERNAL(fopen64) -TLI_DEFINE_STRING_INTERNAL("fopen64") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// int fork(); -TLI_DEFINE_ENUM_INTERNAL(fork) -TLI_DEFINE_STRING_INTERNAL("fork") -TLI_DEFINE_SIG_INTERNAL(Int) - -/// int fprintf(FILE *stream, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(fprintf) -TLI_DEFINE_STRING_INTERNAL("fprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int fputc(int c, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fputc) -TLI_DEFINE_STRING_INTERNAL("fputc") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int fputc_unlocked(int c, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fputc_unlocked) -TLI_DEFINE_STRING_INTERNAL("fputc_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int fputs(const char *s, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fputs) -TLI_DEFINE_STRING_INTERNAL("fputs") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int fputs_unlocked(const char *s, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fputs_unlocked) -TLI_DEFINE_STRING_INTERNAL("fputs_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fread) -TLI_DEFINE_STRING_INTERNAL("fread") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT, SizeT, Ptr) - -/// size_t fread_unlocked(void *ptr, size_t size, size_t nitems, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fread_unlocked) -TLI_DEFINE_STRING_INTERNAL("fread_unlocked") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT, SizeT, Ptr) - -/// void free(void *ptr); -TLI_DEFINE_ENUM_INTERNAL(free) -TLI_DEFINE_STRING_INTERNAL("free") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// double frexp(double num, int *exp); -TLI_DEFINE_ENUM_INTERNAL(frexp) -TLI_DEFINE_STRING_INTERNAL("frexp") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Ptr) - -/// float frexpf(float num, int *exp); -TLI_DEFINE_ENUM_INTERNAL(frexpf) -TLI_DEFINE_STRING_INTERNAL("frexpf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Ptr) - -/// long double frexpl(long double num, int *exp); -TLI_DEFINE_ENUM_INTERNAL(frexpl) -TLI_DEFINE_STRING_INTERNAL("frexpl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Ptr) - -/// int fscanf(FILE *stream, const char *format, ... ); -TLI_DEFINE_ENUM_INTERNAL(fscanf) -TLI_DEFINE_STRING_INTERNAL("fscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int fseek(FILE *stream, long offset, int whence); -TLI_DEFINE_ENUM_INTERNAL(fseek) -TLI_DEFINE_STRING_INTERNAL("fseek") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Long, Int) - -/// int fseeko(FILE *stream, off_t offset, int whence); -TLI_DEFINE_ENUM_INTERNAL(fseeko) -TLI_DEFINE_STRING_INTERNAL("fseeko") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, IntX, Int) - -/// int fseeko64(FILE *stream, off64_t offset, int whence) -TLI_DEFINE_ENUM_INTERNAL(fseeko64) -TLI_DEFINE_STRING_INTERNAL("fseeko64") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int64, Int) - -/// int fsetpos(FILE *stream, const fpos_t *pos); -TLI_DEFINE_ENUM_INTERNAL(fsetpos) -TLI_DEFINE_STRING_INTERNAL("fsetpos") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int fstat(int fildes, struct stat *buf); -TLI_DEFINE_ENUM_INTERNAL(fstat) -TLI_DEFINE_STRING_INTERNAL("fstat") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int fstat64(int filedes, struct stat64 *buf) -TLI_DEFINE_ENUM_INTERNAL(fstat64) -TLI_DEFINE_STRING_INTERNAL("fstat64") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int fstatvfs(int fildes, struct statvfs *buf); -TLI_DEFINE_ENUM_INTERNAL(fstatvfs) -TLI_DEFINE_STRING_INTERNAL("fstatvfs") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int fstatvfs64(int fildes, struct statvfs64 *buf); -TLI_DEFINE_ENUM_INTERNAL(fstatvfs64) -TLI_DEFINE_STRING_INTERNAL("fstatvfs64") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// long ftell(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(ftell) -TLI_DEFINE_STRING_INTERNAL("ftell") -TLI_DEFINE_SIG_INTERNAL(Long, Ptr) - -/// off_t ftello(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(ftello) -TLI_DEFINE_STRING_INTERNAL("ftello") -TLI_DEFINE_SIG_INTERNAL(IntPlus, Ptr) - -/// off64_t ftello64(FILE *stream) -TLI_DEFINE_ENUM_INTERNAL(ftello64) -TLI_DEFINE_STRING_INTERNAL("ftello64") -TLI_DEFINE_SIG_INTERNAL(Int64, Ptr) - -/// int ftrylockfile(FILE *file); -TLI_DEFINE_ENUM_INTERNAL(ftrylockfile) -TLI_DEFINE_STRING_INTERNAL("ftrylockfile") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// void funlockfile(FILE *file); -TLI_DEFINE_ENUM_INTERNAL(funlockfile) -TLI_DEFINE_STRING_INTERNAL("funlockfile") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fwrite) -TLI_DEFINE_STRING_INTERNAL("fwrite") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT, SizeT, Ptr) - -/// size_t fwrite_unlocked(const void *ptr, size_t size, size_t nitems, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(fwrite_unlocked) -TLI_DEFINE_STRING_INTERNAL("fwrite_unlocked") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT, SizeT, Ptr) - -/// int getc(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(getc) -TLI_DEFINE_STRING_INTERNAL("getc") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int getc_unlocked(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(getc_unlocked) -TLI_DEFINE_STRING_INTERNAL("getc_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int getchar(void); -TLI_DEFINE_ENUM_INTERNAL(getchar) -TLI_DEFINE_STRING_INTERNAL("getchar") -TLI_DEFINE_SIG_INTERNAL(Int) - -/// int getchar_unlocked(void); -TLI_DEFINE_ENUM_INTERNAL(getchar_unlocked) -TLI_DEFINE_STRING_INTERNAL("getchar_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int) - -/// char *getenv(const char *name); -TLI_DEFINE_ENUM_INTERNAL(getenv) -TLI_DEFINE_STRING_INTERNAL("getenv") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// int getitimer(int which, struct itimerval *value); -TLI_DEFINE_ENUM_INTERNAL(getitimer) -TLI_DEFINE_STRING_INTERNAL("getitimer") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int getlogin_r(char *name, size_t namesize); -TLI_DEFINE_ENUM_INTERNAL(getlogin_r) -TLI_DEFINE_STRING_INTERNAL("getlogin_r") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT) - -/// struct passwd *getpwnam(const char *name); -TLI_DEFINE_ENUM_INTERNAL(getpwnam) -TLI_DEFINE_STRING_INTERNAL("getpwnam") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// char *gets(char *s); -TLI_DEFINE_ENUM_INTERNAL(gets) -TLI_DEFINE_STRING_INTERNAL("gets") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// int gettimeofday(struct timeval *tp, void *tzp); -TLI_DEFINE_ENUM_INTERNAL(gettimeofday) -TLI_DEFINE_STRING_INTERNAL("gettimeofday") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// uint32_t htonl(uint32_t hostlong); -TLI_DEFINE_ENUM_INTERNAL(htonl) -TLI_DEFINE_STRING_INTERNAL("htonl") -TLI_DEFINE_SIG_INTERNAL(Int32, Int32) - -/// uint16_t htons(uint16_t hostshort); -TLI_DEFINE_ENUM_INTERNAL(htons) -TLI_DEFINE_STRING_INTERNAL("htons") -TLI_DEFINE_SIG_INTERNAL(Int16, Int16) - -/// double hypot(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(hypot) -TLI_DEFINE_STRING_INTERNAL("hypot") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float hypotf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(hypotf) -TLI_DEFINE_STRING_INTERNAL("hypotf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double hypotl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(hypotl) -TLI_DEFINE_STRING_INTERNAL("hypotl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// int iprintf(const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(iprintf) -TLI_DEFINE_STRING_INTERNAL("iprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ellip) - -/// int isascii(int c); -TLI_DEFINE_ENUM_INTERNAL(isascii) -TLI_DEFINE_STRING_INTERNAL("isascii") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int isdigit(int c); -TLI_DEFINE_ENUM_INTERNAL(isdigit) -TLI_DEFINE_STRING_INTERNAL("isdigit") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// long int labs(long int j); -TLI_DEFINE_ENUM_INTERNAL(labs) -TLI_DEFINE_STRING_INTERNAL("labs") -TLI_DEFINE_SIG_INTERNAL(Long, Same) - -/// int lchown(const char *path, uid_t owner, gid_t group); -TLI_DEFINE_ENUM_INTERNAL(lchown) -TLI_DEFINE_STRING_INTERNAL("lchown") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, IntX, IntX) - -/// double ldexp(double x, int n); -TLI_DEFINE_ENUM_INTERNAL(ldexp) -TLI_DEFINE_STRING_INTERNAL("ldexp") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Int) - -/// float ldexpf(float x, int n); -TLI_DEFINE_ENUM_INTERNAL(ldexpf) -TLI_DEFINE_STRING_INTERNAL("ldexpf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Int) - -/// long double ldexpl(long double x, int n); -TLI_DEFINE_ENUM_INTERNAL(ldexpl) -TLI_DEFINE_STRING_INTERNAL("ldexpl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Int) - -/// long long int llabs(long long int j); -TLI_DEFINE_ENUM_INTERNAL(llabs) -TLI_DEFINE_STRING_INTERNAL("llabs") -TLI_DEFINE_SIG_INTERNAL(LLong, LLong) - -/// double log(double x); -TLI_DEFINE_ENUM_INTERNAL(log) -TLI_DEFINE_STRING_INTERNAL("log") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// double log10(double x); -TLI_DEFINE_ENUM_INTERNAL(log10) -TLI_DEFINE_STRING_INTERNAL("log10") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float log10f(float x); -TLI_DEFINE_ENUM_INTERNAL(log10f) -TLI_DEFINE_STRING_INTERNAL("log10f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double log10l(long double x); -TLI_DEFINE_ENUM_INTERNAL(log10l) -TLI_DEFINE_STRING_INTERNAL("log10l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double log1p(double x); -TLI_DEFINE_ENUM_INTERNAL(log1p) -TLI_DEFINE_STRING_INTERNAL("log1p") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float log1pf(float x); -TLI_DEFINE_ENUM_INTERNAL(log1pf) -TLI_DEFINE_STRING_INTERNAL("log1pf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double log1pl(long double x); -TLI_DEFINE_ENUM_INTERNAL(log1pl) -TLI_DEFINE_STRING_INTERNAL("log1pl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double log2(double x); -TLI_DEFINE_ENUM_INTERNAL(log2) -TLI_DEFINE_STRING_INTERNAL("log2") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float log2f(float x); -TLI_DEFINE_ENUM_INTERNAL(log2f) -TLI_DEFINE_STRING_INTERNAL("log2f") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double long double log2l(long double x); -TLI_DEFINE_ENUM_INTERNAL(log2l) -TLI_DEFINE_STRING_INTERNAL("log2l") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int ilogb(double x); -TLI_DEFINE_ENUM_INTERNAL(ilogb) -TLI_DEFINE_STRING_INTERNAL("ilogb") -TLI_DEFINE_SIG_INTERNAL(Int, Dbl) - -/// int ilogbf(float x); -TLI_DEFINE_ENUM_INTERNAL(ilogbf) -TLI_DEFINE_STRING_INTERNAL("ilogbf") -TLI_DEFINE_SIG_INTERNAL(Int, Flt) - -/// int ilogbl(long double x); -TLI_DEFINE_ENUM_INTERNAL(ilogbl) -TLI_DEFINE_STRING_INTERNAL("ilogbl") -TLI_DEFINE_SIG_INTERNAL(Int, LDbl) - -/// double logb(double x); -TLI_DEFINE_ENUM_INTERNAL(logb) -TLI_DEFINE_STRING_INTERNAL("logb") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float logbf(float x); -TLI_DEFINE_ENUM_INTERNAL(logbf) -TLI_DEFINE_STRING_INTERNAL("logbf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double logbl(long double x); -TLI_DEFINE_ENUM_INTERNAL(logbl) -TLI_DEFINE_STRING_INTERNAL("logbl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// float logf(float x); -TLI_DEFINE_ENUM_INTERNAL(logf) -TLI_DEFINE_STRING_INTERNAL("logf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double logl(long double x); -TLI_DEFINE_ENUM_INTERNAL(logl) -TLI_DEFINE_STRING_INTERNAL("logl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int lstat(const char *path, struct stat *buf); -TLI_DEFINE_ENUM_INTERNAL(lstat) -TLI_DEFINE_STRING_INTERNAL("lstat") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int lstat64(const char *path, struct stat64 *buf); -TLI_DEFINE_ENUM_INTERNAL(lstat64) -TLI_DEFINE_STRING_INTERNAL("lstat64") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// void *malloc(size_t size); -TLI_DEFINE_ENUM_INTERNAL(malloc) -TLI_DEFINE_STRING_INTERNAL("malloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT) - -/// void *memalign(size_t boundary, size_t size); -TLI_DEFINE_ENUM_INTERNAL(memalign) -TLI_DEFINE_STRING_INTERNAL("memalign") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT, SizeT) - -/// void *memccpy(void *s1, const void *s2, int c, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memccpy) -TLI_DEFINE_STRING_INTERNAL("memccpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, Int, SizeT) - -/// void *memchr(const void *s, int c, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memchr) -TLI_DEFINE_STRING_INTERNAL("memchr") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, SizeT) - -/// int memcmp(const void *s1, const void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memcmp) -TLI_DEFINE_STRING_INTERNAL("memcmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, SizeT) - -/// void *memcpy(void *s1, const void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memcpy) -TLI_DEFINE_STRING_INTERNAL("memcpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// void *memmove(void *s1, const void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memmove) -TLI_DEFINE_STRING_INTERNAL("memmove") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// void *mempcpy(void *s1, const void *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(mempcpy) -TLI_DEFINE_STRING_INTERNAL("mempcpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// void *memrchr(const void *s, int c, size_t n); -TLI_DEFINE_ENUM_INTERNAL(memrchr) -TLI_DEFINE_STRING_INTERNAL("memrchr") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, SizeT) - -/// void *memset(void *b, int c, size_t len); -TLI_DEFINE_ENUM_INTERNAL(memset) -TLI_DEFINE_STRING_INTERNAL("memset") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int, SizeT) - -/// void memset_pattern16(void *b, const void *pattern16, size_t len); -TLI_DEFINE_ENUM_INTERNAL(memset_pattern16) -TLI_DEFINE_STRING_INTERNAL("memset_pattern16") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr, SizeT) - -/// void memset_pattern4(void *b, const void *pattern4, size_t len); -TLI_DEFINE_ENUM_INTERNAL(memset_pattern4) -TLI_DEFINE_STRING_INTERNAL("memset_pattern4") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr, SizeT) - -/// void memset_pattern8(void *b, const void *pattern8, size_t len); -TLI_DEFINE_ENUM_INTERNAL(memset_pattern8) -TLI_DEFINE_STRING_INTERNAL("memset_pattern8") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr, SizeT) - -/// int mkdir(const char *path, mode_t mode); -TLI_DEFINE_ENUM_INTERNAL(mkdir) -TLI_DEFINE_STRING_INTERNAL("mkdir") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, IntX) - -/// time_t mktime(struct tm *timeptr); -TLI_DEFINE_ENUM_INTERNAL(mktime) -TLI_DEFINE_STRING_INTERNAL("mktime") -TLI_DEFINE_SIG_INTERNAL(IntPlus, Ptr) - -/// double modf(double x, double *iptr); -TLI_DEFINE_ENUM_INTERNAL(modf) -TLI_DEFINE_STRING_INTERNAL("modf") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Ptr) - -/// float modff(float, float *iptr); -TLI_DEFINE_ENUM_INTERNAL(modff) -TLI_DEFINE_STRING_INTERNAL("modff") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Ptr) - -/// long double modfl(long double value, long double *iptr); -TLI_DEFINE_ENUM_INTERNAL(modfl) -TLI_DEFINE_STRING_INTERNAL("modfl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Ptr) - -/// double nan(const char *arg); -TLI_DEFINE_ENUM_INTERNAL(nan) -TLI_DEFINE_STRING_INTERNAL("nan") -TLI_DEFINE_SIG_INTERNAL(Dbl, Ptr) - -/// float nanf(const char *arg); -TLI_DEFINE_ENUM_INTERNAL(nanf) -TLI_DEFINE_STRING_INTERNAL("nanf") -TLI_DEFINE_SIG_INTERNAL(Flt, Ptr) - -/// long double nanl(const char *arg); -TLI_DEFINE_ENUM_INTERNAL(nanl) -TLI_DEFINE_STRING_INTERNAL("nanl") -TLI_DEFINE_SIG_INTERNAL(LDbl, Ptr) - -/// double nearbyint(double x); -TLI_DEFINE_ENUM_INTERNAL(nearbyint) -TLI_DEFINE_STRING_INTERNAL("nearbyint") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float nearbyintf(float x); -TLI_DEFINE_ENUM_INTERNAL(nearbyintf) -TLI_DEFINE_STRING_INTERNAL("nearbyintf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double nearbyintl(long double x); -TLI_DEFINE_ENUM_INTERNAL(nearbyintl) -TLI_DEFINE_STRING_INTERNAL("nearbyintl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double nextafter(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(nextafter) -TLI_DEFINE_STRING_INTERNAL("nextafter") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float nextafterf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(nextafterf) -TLI_DEFINE_STRING_INTERNAL("nextafterf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double nextafterl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(nextafterl) -TLI_DEFINE_STRING_INTERNAL("nextafterl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// double nexttoward(double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(nexttoward) -TLI_DEFINE_STRING_INTERNAL("nexttoward") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, LDbl) - -/// float nexttowardf(float x, long double y); -TLI_DEFINE_ENUM_INTERNAL(nexttowardf) -TLI_DEFINE_STRING_INTERNAL("nexttowardf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, LDbl) - -/// long double nexttowardl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(nexttowardl) -TLI_DEFINE_STRING_INTERNAL("nexttowardl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// uint32_t ntohl(uint32_t netlong); -TLI_DEFINE_ENUM_INTERNAL(ntohl) -TLI_DEFINE_STRING_INTERNAL("ntohl") -TLI_DEFINE_SIG_INTERNAL(Int32, Int32) - -/// uint16_t ntohs(uint16_t netshort); -TLI_DEFINE_ENUM_INTERNAL(ntohs) -TLI_DEFINE_STRING_INTERNAL("ntohs") -TLI_DEFINE_SIG_INTERNAL(Int16, Int16) - -/// int open(const char *path, int oflag, ... ); -TLI_DEFINE_ENUM_INTERNAL(open) -TLI_DEFINE_STRING_INTERNAL("open") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int, Ellip) - -/// int open64(const char *filename, int flags[, mode_t mode]) -TLI_DEFINE_ENUM_INTERNAL(open64) -TLI_DEFINE_STRING_INTERNAL("open64") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Int, Ellip) - -/// DIR *opendir(const char *dirname); -TLI_DEFINE_ENUM_INTERNAL(opendir) -TLI_DEFINE_STRING_INTERNAL("opendir") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// int pclose(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(pclose) -TLI_DEFINE_STRING_INTERNAL("pclose") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// void perror(const char *s); -TLI_DEFINE_ENUM_INTERNAL(perror) -TLI_DEFINE_STRING_INTERNAL("perror") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// FILE *popen(const char *command, const char *mode); -TLI_DEFINE_ENUM_INTERNAL(popen) -TLI_DEFINE_STRING_INTERNAL("popen") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// int posix_memalign(void **memptr, size_t alignment, size_t size); -TLI_DEFINE_ENUM_INTERNAL(posix_memalign) -TLI_DEFINE_STRING_INTERNAL("posix_memalign") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT, SizeT) - -/// double pow(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(pow) -TLI_DEFINE_STRING_INTERNAL("pow") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float powf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(powf) -TLI_DEFINE_STRING_INTERNAL("powf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double powl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(powl) -TLI_DEFINE_STRING_INTERNAL("powl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset); -TLI_DEFINE_ENUM_INTERNAL(pread) -TLI_DEFINE_STRING_INTERNAL("pread") -TLI_DEFINE_SIG_INTERNAL(SSizeT, Int, Ptr, SizeT, IntPlus) - -/// int printf(const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(printf) -TLI_DEFINE_STRING_INTERNAL("printf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ellip) - -/// int putc(int c, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(putc) -TLI_DEFINE_STRING_INTERNAL("putc") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int putc_unlocked(int c, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(putc_unlocked) -TLI_DEFINE_STRING_INTERNAL("putc_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int putchar(int c); -TLI_DEFINE_ENUM_INTERNAL(putchar) -TLI_DEFINE_STRING_INTERNAL("putchar") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int putchar_unlocked(int c); -TLI_DEFINE_ENUM_INTERNAL(putchar_unlocked) -TLI_DEFINE_STRING_INTERNAL("putchar_unlocked") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// int puts(const char *s); -TLI_DEFINE_ENUM_INTERNAL(puts) -TLI_DEFINE_STRING_INTERNAL("puts") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// void *pvalloc(size_t size); -TLI_DEFINE_ENUM_INTERNAL(pvalloc) -TLI_DEFINE_STRING_INTERNAL("pvalloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT) - -/// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset); -TLI_DEFINE_ENUM_INTERNAL(pwrite) -TLI_DEFINE_STRING_INTERNAL("pwrite") -TLI_DEFINE_SIG_INTERNAL(SSizeT, Int, Ptr, SizeT, IntPlus) - -/// void qsort(void *base, size_t nel, size_t width, -/// int (*compar)(const void *, const void *)); -TLI_DEFINE_ENUM_INTERNAL(qsort) -TLI_DEFINE_STRING_INTERNAL("qsort") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, SizeT, SizeT, Ptr) - -/// ssize_t read(int fildes, void *buf, size_t nbyte); -TLI_DEFINE_ENUM_INTERNAL(read) -TLI_DEFINE_STRING_INTERNAL("read") -TLI_DEFINE_SIG_INTERNAL(SSizeT, Int, Ptr, SizeT) - -/// ssize_t readlink(const char *path, char *buf, size_t bufsize); -TLI_DEFINE_ENUM_INTERNAL(readlink) -TLI_DEFINE_STRING_INTERNAL("readlink") -TLI_DEFINE_SIG_INTERNAL(SSizeT, Ptr, Ptr, SizeT) - -/// void *realloc(void *ptr, size_t size); -TLI_DEFINE_ENUM_INTERNAL(realloc) -TLI_DEFINE_STRING_INTERNAL("realloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT) - -/// void *reallocf(void *ptr, size_t size); -TLI_DEFINE_ENUM_INTERNAL(reallocf) -TLI_DEFINE_STRING_INTERNAL("reallocf") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT) - -/// void *reallocarray(void *ptr, size_t nmemb, size_t size); -TLI_DEFINE_ENUM_INTERNAL(reallocarray) -TLI_DEFINE_STRING_INTERNAL("reallocarray") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT, SizeT) - -/// char *realpath(const char *file_name, char *resolved_name); -TLI_DEFINE_ENUM_INTERNAL(realpath) -TLI_DEFINE_STRING_INTERNAL("realpath") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// double remainder(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(remainder) -TLI_DEFINE_STRING_INTERNAL("remainder") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float remainderf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(remainderf) -TLI_DEFINE_STRING_INTERNAL("remainderf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double remainderl(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(remainderl) -TLI_DEFINE_STRING_INTERNAL("remainderl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// double remquo(double x, double y, int *quo); -TLI_DEFINE_ENUM_INTERNAL(remquo) -TLI_DEFINE_STRING_INTERNAL("remquo") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl, Ptr) - -/// float remquof(float x, float y, int *quo); -TLI_DEFINE_ENUM_INTERNAL(remquof) -TLI_DEFINE_STRING_INTERNAL("remquof") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt, Ptr) - -/// long double remquol(long double x, long double y, int *quo); -TLI_DEFINE_ENUM_INTERNAL(remquol) -TLI_DEFINE_STRING_INTERNAL("remquol") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl, Ptr) - -/// double fdim(double x, double y); -TLI_DEFINE_ENUM_INTERNAL(fdim) -TLI_DEFINE_STRING_INTERNAL("fdim") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Dbl) - -/// float fdimf(float x, float y); -TLI_DEFINE_ENUM_INTERNAL(fdimf) -TLI_DEFINE_STRING_INTERNAL("fdimf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Flt) - -/// long double fdiml(long double x, long double y); -TLI_DEFINE_ENUM_INTERNAL(fdiml) -TLI_DEFINE_STRING_INTERNAL("fdiml") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, LDbl) - -/// int remove(const char *path); -TLI_DEFINE_ENUM_INTERNAL(remove) -TLI_DEFINE_STRING_INTERNAL("remove") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int rename(const char *old, const char *new); -TLI_DEFINE_ENUM_INTERNAL(rename) -TLI_DEFINE_STRING_INTERNAL("rename") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// void rewind(FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(rewind) -TLI_DEFINE_STRING_INTERNAL("rewind") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// double rint(double x); -TLI_DEFINE_ENUM_INTERNAL(rint) -TLI_DEFINE_STRING_INTERNAL("rint") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float rintf(float x); -TLI_DEFINE_ENUM_INTERNAL(rintf) -TLI_DEFINE_STRING_INTERNAL("rintf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double rintl(long double x); -TLI_DEFINE_ENUM_INTERNAL(rintl) -TLI_DEFINE_STRING_INTERNAL("rintl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int rmdir(const char *path); -TLI_DEFINE_ENUM_INTERNAL(rmdir) -TLI_DEFINE_STRING_INTERNAL("rmdir") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// double round(double x); -TLI_DEFINE_ENUM_INTERNAL(round) -TLI_DEFINE_STRING_INTERNAL("round") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// double roundeven(double x); -TLI_DEFINE_ENUM_INTERNAL(roundeven) -TLI_DEFINE_STRING_INTERNAL("roundeven") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float roundevenf(float x); -TLI_DEFINE_ENUM_INTERNAL(roundevenf) -TLI_DEFINE_STRING_INTERNAL("roundevenf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double roundevenl(long double x); -TLI_DEFINE_ENUM_INTERNAL(roundevenl) -TLI_DEFINE_STRING_INTERNAL("roundevenl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// float roundf(float x); -TLI_DEFINE_ENUM_INTERNAL(roundf) -TLI_DEFINE_STRING_INTERNAL("roundf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double roundl(long double x); -TLI_DEFINE_ENUM_INTERNAL(roundl) -TLI_DEFINE_STRING_INTERNAL("roundl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// double scalbln(double arg, long exp); -TLI_DEFINE_ENUM_INTERNAL(scalbln) -TLI_DEFINE_STRING_INTERNAL("scalbln") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Long) - -/// float scalblnf(float arg, long exp); -TLI_DEFINE_ENUM_INTERNAL(scalblnf) -TLI_DEFINE_STRING_INTERNAL("scalblnf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Long) - -/// long double scalblnl(long double arg, long exp); -TLI_DEFINE_ENUM_INTERNAL(scalblnl) -TLI_DEFINE_STRING_INTERNAL("scalblnl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Long) - -/// double scalbn(double arg, int exp); -TLI_DEFINE_ENUM_INTERNAL(scalbn) -TLI_DEFINE_STRING_INTERNAL("scalbn") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl, Int) - -/// float scalbnf(float arg, int exp); -TLI_DEFINE_ENUM_INTERNAL(scalbnf) -TLI_DEFINE_STRING_INTERNAL("scalbnf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt, Int) - -/// long double scalbnl(long double arg, int exp); -TLI_DEFINE_ENUM_INTERNAL(scalbnl) -TLI_DEFINE_STRING_INTERNAL("scalbnl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl, Int) - -/// int scanf(const char *restrict format, ... ); -TLI_DEFINE_ENUM_INTERNAL(scanf) -TLI_DEFINE_STRING_INTERNAL("scanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ellip) - -/// void setbuf(FILE *stream, char *buf); -TLI_DEFINE_ENUM_INTERNAL(setbuf) -TLI_DEFINE_STRING_INTERNAL("setbuf") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr, Ptr) - -/// int setitimer(int which, const struct itimerval *value, -/// struct itimerval *ovalue); -TLI_DEFINE_ENUM_INTERNAL(setitimer) -TLI_DEFINE_STRING_INTERNAL("setitimer") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr, Ptr) - -/// int setvbuf(FILE *stream, char *buf, int type, size_t size); -TLI_DEFINE_ENUM_INTERNAL(setvbuf) -TLI_DEFINE_STRING_INTERNAL("setvbuf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Int, SizeT) - -/// double sin(double x); -TLI_DEFINE_ENUM_INTERNAL(sin) -TLI_DEFINE_STRING_INTERNAL("sin") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float sinf(float x); -TLI_DEFINE_ENUM_INTERNAL(sinf) -TLI_DEFINE_STRING_INTERNAL("sinf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double sinh(double x); -TLI_DEFINE_ENUM_INTERNAL(sinh) -TLI_DEFINE_STRING_INTERNAL("sinh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float sinhf(float x); -TLI_DEFINE_ENUM_INTERNAL(sinhf) -TLI_DEFINE_STRING_INTERNAL("sinhf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double sinhl(long double x); -TLI_DEFINE_ENUM_INTERNAL(sinhl) -TLI_DEFINE_STRING_INTERNAL("sinhl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double sinl(long double x); -TLI_DEFINE_ENUM_INTERNAL(sinl) -TLI_DEFINE_STRING_INTERNAL("sinl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// void sincos(double x, double *sin_out, double *cos_out); -TLI_DEFINE_ENUM_INTERNAL(sincos) -TLI_DEFINE_STRING_INTERNAL("sincos") -TLI_DEFINE_SIG_INTERNAL(Void, Dbl, Ptr, Ptr) - -/// void sincosf(float x, float *sin_out, float *cos_out); -TLI_DEFINE_ENUM_INTERNAL(sincosf) -TLI_DEFINE_STRING_INTERNAL("sincosf") -TLI_DEFINE_SIG_INTERNAL(Void, Flt, Ptr, Ptr) - -/// void sincosl(long double x, long double *sin_out, long double *cos_out); -TLI_DEFINE_ENUM_INTERNAL(sincosl) -TLI_DEFINE_STRING_INTERNAL("sincosl") -TLI_DEFINE_SIG_INTERNAL(Void, LDbl, Ptr, Ptr) - -/// int siprintf(char *str, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(siprintf) -TLI_DEFINE_STRING_INTERNAL("siprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int snprintf(char *s, size_t n, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(snprintf) -TLI_DEFINE_STRING_INTERNAL("snprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT, Ptr, Ellip) - -/// int sprintf(char *str, const char *format, ...); -TLI_DEFINE_ENUM_INTERNAL(sprintf) -TLI_DEFINE_STRING_INTERNAL("sprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// double sqrt(double x); -TLI_DEFINE_ENUM_INTERNAL(sqrt) -TLI_DEFINE_STRING_INTERNAL("sqrt") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float sqrtf(float x); -TLI_DEFINE_ENUM_INTERNAL(sqrtf) -TLI_DEFINE_STRING_INTERNAL("sqrtf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double sqrtl(long double x); -TLI_DEFINE_ENUM_INTERNAL(sqrtl) -TLI_DEFINE_STRING_INTERNAL("sqrtl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int sscanf(const char *s, const char *format, ... ); -TLI_DEFINE_ENUM_INTERNAL(sscanf) -TLI_DEFINE_STRING_INTERNAL("sscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ellip) - -/// int stat(const char *path, struct stat *buf); -TLI_DEFINE_ENUM_INTERNAL(stat) -TLI_DEFINE_STRING_INTERNAL("stat") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int stat64(const char *path, struct stat64 *buf); -TLI_DEFINE_ENUM_INTERNAL(stat64) -TLI_DEFINE_STRING_INTERNAL("stat64") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int statvfs(const char *path, struct statvfs *buf); -TLI_DEFINE_ENUM_INTERNAL(statvfs) -TLI_DEFINE_STRING_INTERNAL("statvfs") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int statvfs64(const char *path, struct statvfs64 *buf) -TLI_DEFINE_ENUM_INTERNAL(statvfs64) -TLI_DEFINE_STRING_INTERNAL("statvfs64") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// char *stpcpy(char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(stpcpy) -TLI_DEFINE_STRING_INTERNAL("stpcpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// char *stpncpy(char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(stpncpy) -TLI_DEFINE_STRING_INTERNAL("stpncpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// int strcasecmp(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcasecmp) -TLI_DEFINE_STRING_INTERNAL("strcasecmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// char *strcat(char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcat) -TLI_DEFINE_STRING_INTERNAL("strcat") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// char *strchr(const char *s, int c); -TLI_DEFINE_ENUM_INTERNAL(strchr) -TLI_DEFINE_STRING_INTERNAL("strchr") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int) - -/// int strcmp(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcmp) -TLI_DEFINE_STRING_INTERNAL("strcmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int strcoll(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcoll) -TLI_DEFINE_STRING_INTERNAL("strcoll") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// char *strcpy(char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcpy) -TLI_DEFINE_STRING_INTERNAL("strcpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// size_t strcspn(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strcspn) -TLI_DEFINE_STRING_INTERNAL("strcspn") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr) - -/// char *strdup(const char *s1); -TLI_DEFINE_ENUM_INTERNAL(strdup) -TLI_DEFINE_STRING_INTERNAL("strdup") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr) - -/// size_t strlcat(char *dst, const char *src, size_t size); -TLI_DEFINE_ENUM_INTERNAL(strlcat) -TLI_DEFINE_STRING_INTERNAL("strlcat") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr, SizeT) - -/// size_t strlcpy(char *dst, const char *src, size_t size); -TLI_DEFINE_ENUM_INTERNAL(strlcpy) -TLI_DEFINE_STRING_INTERNAL("strlcpy") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr, SizeT) - -/// size_t strlen(const char *s); -TLI_DEFINE_ENUM_INTERNAL(strlen) -TLI_DEFINE_STRING_INTERNAL("strlen") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr) - -/// int strncasecmp(const char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strncasecmp) -TLI_DEFINE_STRING_INTERNAL("strncasecmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, SizeT) - -/// char *strncat(char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strncat) -TLI_DEFINE_STRING_INTERNAL("strncat") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// int strncmp(const char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strncmp) -TLI_DEFINE_STRING_INTERNAL("strncmp") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, SizeT) - -/// char *strncpy(char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strncpy) -TLI_DEFINE_STRING_INTERNAL("strncpy") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, SizeT) - -/// char *strndup(const char *s1, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strndup) -TLI_DEFINE_STRING_INTERNAL("strndup") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT) - -/// size_t strnlen(const char *s, size_t maxlen); -TLI_DEFINE_ENUM_INTERNAL(strnlen) -TLI_DEFINE_STRING_INTERNAL("strnlen") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, SizeT) - -/// char *strpbrk(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strpbrk) -TLI_DEFINE_STRING_INTERNAL("strpbrk") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// char *strrchr(const char *s, int c); -TLI_DEFINE_ENUM_INTERNAL(strrchr) -TLI_DEFINE_STRING_INTERNAL("strrchr") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Int) - -/// size_t strspn(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strspn) -TLI_DEFINE_STRING_INTERNAL("strspn") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr) - -/// char *strstr(const char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strstr) -TLI_DEFINE_STRING_INTERNAL("strstr") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// double strtod(const char *nptr, char **endptr); -TLI_DEFINE_ENUM_INTERNAL(strtod) -TLI_DEFINE_STRING_INTERNAL("strtod") -TLI_DEFINE_SIG_INTERNAL(Dbl, Ptr, Ptr) - -/// float strtof(const char *nptr, char **endptr); -TLI_DEFINE_ENUM_INTERNAL(strtof) -TLI_DEFINE_STRING_INTERNAL("strtof") -TLI_DEFINE_SIG_INTERNAL(Flt, Ptr, Ptr) - -/// char *strtok(char *s1, const char *s2); -TLI_DEFINE_ENUM_INTERNAL(strtok) -TLI_DEFINE_STRING_INTERNAL("strtok") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr) - -/// char *strtok_r(char *s, const char *sep, char **lasts); -TLI_DEFINE_ENUM_INTERNAL(strtok_r) -TLI_DEFINE_STRING_INTERNAL("strtok_r") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, Ptr, Ptr) - -/// long int strtol(const char *nptr, char **endptr, int base); -TLI_DEFINE_ENUM_INTERNAL(strtol) -TLI_DEFINE_STRING_INTERNAL("strtol") -TLI_DEFINE_SIG_INTERNAL(Long, Ptr, Ptr, Int) - -/// long double strtold(const char *nptr, char **endptr); -TLI_DEFINE_ENUM_INTERNAL(strtold) -TLI_DEFINE_STRING_INTERNAL("strtold") -TLI_DEFINE_SIG_INTERNAL(LDbl, Ptr, Ptr) - -/// long long int strtoll(const char *nptr, char **endptr, int base); -TLI_DEFINE_ENUM_INTERNAL(strtoll) -TLI_DEFINE_STRING_INTERNAL("strtoll") -TLI_DEFINE_SIG_INTERNAL(LLong, Ptr, Ptr, Int) - -/// unsigned long int strtoul(const char *nptr, char **endptr, int base); -TLI_DEFINE_ENUM_INTERNAL(strtoul) -TLI_DEFINE_STRING_INTERNAL("strtoul") -TLI_DEFINE_SIG_INTERNAL(Long, Ptr, Ptr, Int) - -/// unsigned long long int strtoull(const char *nptr, char **endptr, int base); -TLI_DEFINE_ENUM_INTERNAL(strtoull) -TLI_DEFINE_STRING_INTERNAL("strtoull") -TLI_DEFINE_SIG_INTERNAL(LLong, Ptr, Ptr, Int) - -/// size_t strxfrm(char *s1, const char *s2, size_t n); -TLI_DEFINE_ENUM_INTERNAL(strxfrm) -TLI_DEFINE_STRING_INTERNAL("strxfrm") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr, Ptr, SizeT) - -/// int system(const char *command); -TLI_DEFINE_ENUM_INTERNAL(system) -TLI_DEFINE_STRING_INTERNAL("system") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// double tan(double x); -TLI_DEFINE_ENUM_INTERNAL(tan) -TLI_DEFINE_STRING_INTERNAL("tan") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float tanf(float x); -TLI_DEFINE_ENUM_INTERNAL(tanf) -TLI_DEFINE_STRING_INTERNAL("tanf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// double tanh(double x); -TLI_DEFINE_ENUM_INTERNAL(tanh) -TLI_DEFINE_STRING_INTERNAL("tanh") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float tanhf(float x); -TLI_DEFINE_ENUM_INTERNAL(tanhf) -TLI_DEFINE_STRING_INTERNAL("tanhf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double tanhl(long double x); -TLI_DEFINE_ENUM_INTERNAL(tanhl) -TLI_DEFINE_STRING_INTERNAL("tanhl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// long double tanl(long double x); -TLI_DEFINE_ENUM_INTERNAL(tanl) -TLI_DEFINE_STRING_INTERNAL("tanl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// clock_t times(struct tms *buffer); -TLI_DEFINE_ENUM_INTERNAL(times) -TLI_DEFINE_STRING_INTERNAL("times") -TLI_DEFINE_SIG_INTERNAL(IntPlus, Ptr) - -/// FILE *tmpfile(void); -TLI_DEFINE_ENUM_INTERNAL(tmpfile) -TLI_DEFINE_STRING_INTERNAL("tmpfile") -TLI_DEFINE_SIG_INTERNAL(Ptr) - -/// FILE *tmpfile64(void) -TLI_DEFINE_ENUM_INTERNAL(tmpfile64) -TLI_DEFINE_STRING_INTERNAL("tmpfile64") -TLI_DEFINE_SIG_INTERNAL(Ptr) - -/// int toascii(int c); -TLI_DEFINE_ENUM_INTERNAL(toascii) -TLI_DEFINE_STRING_INTERNAL("toascii") -TLI_DEFINE_SIG_INTERNAL(Int, Int) - -/// double trunc(double x); -TLI_DEFINE_ENUM_INTERNAL(trunc) -TLI_DEFINE_STRING_INTERNAL("trunc") -TLI_DEFINE_SIG_INTERNAL(Dbl, Dbl) - -/// float truncf(float x); -TLI_DEFINE_ENUM_INTERNAL(truncf) -TLI_DEFINE_STRING_INTERNAL("truncf") -TLI_DEFINE_SIG_INTERNAL(Flt, Flt) - -/// long double truncl(long double x); -TLI_DEFINE_ENUM_INTERNAL(truncl) -TLI_DEFINE_STRING_INTERNAL("truncl") -TLI_DEFINE_SIG_INTERNAL(LDbl, LDbl) - -/// int uname(struct utsname *name); -TLI_DEFINE_ENUM_INTERNAL(uname) -TLI_DEFINE_STRING_INTERNAL("uname") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int ungetc(int c, FILE *stream); -TLI_DEFINE_ENUM_INTERNAL(ungetc) -TLI_DEFINE_STRING_INTERNAL("ungetc") -TLI_DEFINE_SIG_INTERNAL(Int, Int, Ptr) - -/// int unlink(const char *path); -TLI_DEFINE_ENUM_INTERNAL(unlink) -TLI_DEFINE_STRING_INTERNAL("unlink") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int unsetenv(const char *name); -TLI_DEFINE_ENUM_INTERNAL(unsetenv) -TLI_DEFINE_STRING_INTERNAL("unsetenv") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr) - -/// int utime(const char *path, const struct utimbuf *times); -TLI_DEFINE_ENUM_INTERNAL(utime) -TLI_DEFINE_STRING_INTERNAL("utime") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int utimes(const char *path, const struct timeval times[2]); -TLI_DEFINE_ENUM_INTERNAL(utimes) -TLI_DEFINE_STRING_INTERNAL("utimes") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// void *valloc(size_t size); -TLI_DEFINE_ENUM_INTERNAL(valloc) -TLI_DEFINE_STRING_INTERNAL("valloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT) - -/// void *vec_calloc(size_t count, size_t size); -TLI_DEFINE_ENUM_INTERNAL(vec_calloc) -TLI_DEFINE_STRING_INTERNAL("vec_calloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT, SizeT) - -/// void vec_free(void *ptr); -TLI_DEFINE_ENUM_INTERNAL(vec_free) -TLI_DEFINE_STRING_INTERNAL("vec_free") -TLI_DEFINE_SIG_INTERNAL(Void, Ptr) - -/// void *vec_malloc(size_t size); -TLI_DEFINE_ENUM_INTERNAL(vec_malloc) -TLI_DEFINE_STRING_INTERNAL("vec_malloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, SizeT) - -/// void *vec_realloc(void *ptr, size_t size); -TLI_DEFINE_ENUM_INTERNAL(vec_realloc) -TLI_DEFINE_STRING_INTERNAL("vec_realloc") -TLI_DEFINE_SIG_INTERNAL(Ptr, Ptr, SizeT) - -/// int vfprintf(FILE *stream, const char *format, va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vfprintf) -TLI_DEFINE_STRING_INTERNAL("vfprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int vfscanf(FILE *stream, const char *format, va_list arg); -TLI_DEFINE_ENUM_INTERNAL(vfscanf) -TLI_DEFINE_STRING_INTERNAL("vfscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int vprintf(const char *restrict format, va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vprintf) -TLI_DEFINE_STRING_INTERNAL("vprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int vscanf(const char *format, va_list arg); -TLI_DEFINE_ENUM_INTERNAL(vscanf) -TLI_DEFINE_STRING_INTERNAL("vscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr) - -/// int vsnprintf(char *s, size_t n, const char *format, va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vsnprintf) -TLI_DEFINE_STRING_INTERNAL("vsnprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, SizeT, Ptr, Ptr) - -/// int vsprintf(char *s, const char *format, va_list ap); -TLI_DEFINE_ENUM_INTERNAL(vsprintf) -TLI_DEFINE_STRING_INTERNAL("vsprintf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// int vsscanf(const char *s, const char *format, va_list arg); -TLI_DEFINE_ENUM_INTERNAL(vsscanf) -TLI_DEFINE_STRING_INTERNAL("vsscanf") -TLI_DEFINE_SIG_INTERNAL(Int, Ptr, Ptr, Ptr) - -/// size_t wcslen (const wchar_t* wcs); -TLI_DEFINE_ENUM_INTERNAL(wcslen) -TLI_DEFINE_STRING_INTERNAL("wcslen") -TLI_DEFINE_SIG_INTERNAL(SizeT, Ptr) - -/// ssize_t write(int fildes, const void *buf, size_t nbyte); -TLI_DEFINE_ENUM_INTERNAL(write) -TLI_DEFINE_STRING_INTERNAL("write") -TLI_DEFINE_SIG_INTERNAL(SSizeT, Int, Ptr, SizeT) - -#undef TLI_DEFINE_ENUM_INTERNAL -#undef TLI_DEFINE_STRING_INTERNAL -#undef TLI_DEFINE_SIG_INTERNAL -#endif // One of TLI_DEFINE_ENUM/STRING are defined. - -#undef TLI_DEFINE_ENUM -#undef TLI_DEFINE_STRING -#undef TLI_DEFINE_SIG diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.h b/llvm/include/llvm/Analysis/TargetLibraryInfo.h index 3b6cc0d1944fd..0f98af69f12c6 100644 --- a/llvm/include/llvm/Analysis/TargetLibraryInfo.h +++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.h @@ -10,6 +10,7 @@ #define LLVM_ANALYSIS_TARGETLIBRARYINFO_H #include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/StringTable.h" #include "llvm/IR/Constants.h" #include "llvm/IR/InstrTypes.h" #include "llvm/IR/Module.h" @@ -70,13 +71,8 @@ class VecDesc { LLVM_ABI std::string getVectorFunctionABIVariantString() const; }; - enum LibFunc : unsigned { -#define TLI_DEFINE_ENUM -#include "llvm/Analysis/TargetLibraryInfo.def" - - NumLibFuncs, - NotLibFunc - }; +#define GET_TARGET_LIBRARY_INFO_ENUM +#include "llvm/Analysis/TargetLibraryInfo.inc" /// Implementation of the target library information. /// @@ -89,7 +85,8 @@ class TargetLibraryInfoImpl { unsigned char AvailableArray[(NumLibFuncs+3)/4]; DenseMap CustomNames; - LLVM_ABI static StringLiteral const StandardNames[NumLibFuncs]; +#define GET_TARGET_LIBRARY_INFO_IMPL_DECL +#include "llvm/Analysis/TargetLibraryInfo.inc" bool ShouldExtI32Param, ShouldExtI32Return, ShouldSignExtI32Param, ShouldSignExtI32Return; unsigned SizeOfInt; @@ -160,7 +157,8 @@ class TargetLibraryInfoImpl { /// Forces a function to be marked as available and provide an alternate name /// that must be used. void setAvailableWithName(LibFunc F, StringRef Name) { - if (StandardNames[F] != Name) { + if (StringRef(StandardNamesStrTable.getCString(StandardNamesOffsets[F]), + StandardNamesSizeTable[F]) != Name) { setState(F, CustomName); CustomNames[F] = std::string(Name); assert(CustomNames.contains(F)); @@ -438,7 +436,9 @@ class TargetLibraryInfo { /// Return the canonical name for a LibFunc. This should not be used for /// semantic purposes, use getName instead. static StringRef getStandardName(LibFunc F) { - return TargetLibraryInfoImpl::StandardNames[F]; + return StringRef(TargetLibraryInfoImpl::StandardNamesStrTable.getCString( + TargetLibraryInfoImpl::StandardNamesOffsets[F]), + TargetLibraryInfoImpl::StandardNamesSizeTable[F]); } StringRef getName(LibFunc F) const { @@ -446,7 +446,9 @@ class TargetLibraryInfo { if (State == TargetLibraryInfoImpl::Unavailable) return StringRef(); if (State == TargetLibraryInfoImpl::StandardName) - return Impl->StandardNames[F]; + return StringRef( + Impl->StandardNamesStrTable.getCString(Impl->StandardNamesOffsets[F]), + Impl->StandardNamesSizeTable[F]); assert(State == TargetLibraryInfoImpl::CustomName); return Impl->CustomNames.find(F)->second; } diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfo.td b/llvm/include/llvm/Analysis/TargetLibraryInfo.td new file mode 100644 index 0000000000000..10b43ad2466fc --- /dev/null +++ b/llvm/include/llvm/Analysis/TargetLibraryInfo.td @@ -0,0 +1,1697 @@ +//===-- TargetLibraryInfo.td - File that describes library functions ------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +include "llvm/Analysis/TargetLibraryInfoImpl.td" + +/// void *operator new(unsigned int); +def msvc_new_int : TargetLibCall<"??2@YAPAXI@Z", Ptr, [Int]>; + +/// void *operator new(unsigned int, const std::nothrow_t&); +def msvc_new_int_nothrow + : TargetLibCall<"??2@YAPAXIABUnothrow_t@std@@@Z", Ptr, [Int, Ptr]>; + +/// void *operator new(unsigned long long); +def msvc_new_longlong : TargetLibCall<"??2@YAPEAX_K@Z", Ptr, [LLong]>; + +/// void *operator new(unsigned long long, const std::nothrow_t&); +def msvc_new_longlong_nothrow + : TargetLibCall<"??2@YAPEAX_KAEBUnothrow_t@std@@@Z", Ptr, [LLong, Ptr]>; + +/// void operator delete(void*); +def msvc_delete_ptr32 : TargetLibCall<"??3@YAXPAX@Z", Void, [Ptr]>; + +/// void operator delete(void*, const std::nothrow_t&); +def msvc_delete_ptr32_nothrow + : TargetLibCall<"??3@YAXPAXABUnothrow_t@std@@@Z", Void, [Ptr, Ptr]>; + +/// void operator delete(void*, unsigned int); +def msvc_delete_ptr32_int : TargetLibCall<"??3@YAXPAXI@Z", Void, [Ptr, Int]>; + +/// void operator delete(void*); +def msvc_delete_ptr64 : TargetLibCall<"??3@YAXPEAX@Z", Void, [Ptr]>; + +/// void operator delete(void*, const std::nothrow_t&); +def msvc_delete_ptr64_nothrow + : TargetLibCall<"??3@YAXPEAXAEBUnothrow_t@std@@@Z", Void, [Ptr, Ptr]>; + +/// void operator delete(void*, unsigned long long); +def msvc_delete_ptr64_longlong + : TargetLibCall<"??3@YAXPEAX_K@Z", Void, [Ptr, LLong]>; + +/// void *operator new[](unsigned int); +def msvc_new_array_int : TargetLibCall<"??_U@YAPAXI@Z", Ptr, [Int]>; + +/// void *operator new](unsigned int, [const std::nothrow_t&); +def msvc_new_array_int_nothrow + : TargetLibCall<"??_U@YAPAXIABUnothrow_t@std@@@Z", Ptr, [Int, Ptr]>; + +/// void *operator new[](unsigned long long); +def msvc_new_array_longlong : TargetLibCall<"??_U@YAPEAX_K@Z", Ptr, [LLong]>; + +/// void *operator new](unsigned long long, [const std::nothrow_t&); +def msvc_new_array_longlong_nothrow + : TargetLibCall<"??_U@YAPEAX_KAEBUnothrow_t@std@@@Z", Ptr, [LLong, Ptr]>; + +/// void operator delete[](void*); +def msvc_delete_array_ptr32 : TargetLibCall<"??_V@YAXPAX@Z", Void, [Ptr]>; + +/// void operator delete](void*, [const std::nothrow_t&); +def msvc_delete_array_ptr32_nothrow + : TargetLibCall<"??_V@YAXPAXABUnothrow_t@std@@@Z", Void, [Ptr, Ptr]>; + +/// void operator delete](void*, [unsigned int); +def msvc_delete_array_ptr32_int + : TargetLibCall<"??_V@YAXPAXI@Z", Void, [Ptr, Int]>; + +/// void operator delete[](void*); +def msvc_delete_array_ptr64 : TargetLibCall<"??_V@YAXPEAX@Z", Void, [Ptr]>; + +/// void operator delete](void*, [const std::nothrow_t&); +def msvc_delete_array_ptr64_nothrow + : TargetLibCall<"??_V@YAXPEAXAEBUnothrow_t@std@@@Z", Void, [Ptr, Ptr]>; + +/// void operator delete](void*, [unsigned long long); +def msvc_delete_array_ptr64_longlong + : TargetLibCall<"??_V@YAXPEAX_K@Z", Void, [Ptr, LLong]>; + +/// int _IO_getc(_IO_FILE * __fp); +def under_IO_getc : TargetLibCall<"_IO_getc", Int, [Ptr]>; + +/// int _IO_putc(int __c, _IO_FILE * __fp); +def under_IO_putc : TargetLibCall<"_IO_putc", Int, [Int, Ptr]>; + +/// void operator delete[](void*); +def ZdaPv : TargetLibCall<"_ZdaPv", Void, [Ptr]>; + +/// void operator delete](void*, [const std::nothrow_t&); +def ZdaPvRKSt9nothrow_t + : TargetLibCall<"_ZdaPvRKSt9nothrow_t", Void, [Ptr, Ptr]>; + +/// void operator delete](void*, [std::align_val_t); +def ZdaPvSt11align_val_t + : TargetLibCall<"_ZdaPvSt11align_val_t", Void, [Ptr, IntPlus]>; + +/// void operator delete](void*, [std::align_val_t, const std::nothrow_t&) +def ZdaPvSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZdaPvSt11align_val_tRKSt9nothrow_t", + Void, [Ptr, IntPlus, Ptr]>; + +/// void operator delete](void*, [unsigned int); +def ZdaPvj : TargetLibCall<"_ZdaPvj", Void, [Ptr, Int]>; + +/// void operator delete](void*, [unsigned int, std::align_val_t); +def ZdaPvjSt11align_val_t + : TargetLibCall<"_ZdaPvjSt11align_val_t", Void, [Ptr, Int, Int]>; + +/// void operator delete](void*, [unsigned long); +def ZdaPvm : TargetLibCall<"_ZdaPvm", Void, [Ptr, Long]>; + +/// void operator delete](void*, [unsigned long, std::align_val_t); +def ZdaPvmSt11align_val_t + : TargetLibCall<"_ZdaPvmSt11align_val_t", Void, [Ptr, Long, Long]>; + +/// void operator delete(void*); +def ZdlPv : TargetLibCall<"_ZdlPv", Void, [Ptr]>; + +/// void operator delete(void*, const std::nothrow_t&); +def ZdlPvRKSt9nothrow_t + : TargetLibCall<"_ZdlPvRKSt9nothrow_t", Void, [Ptr, Ptr]>; + +/// void operator delete(void*, std::align_val_t) +def ZdlPvSt11align_val_t + : TargetLibCall<"_ZdlPvSt11align_val_t", Void, [Ptr, IntPlus]>; + +/// void operator delete(void*, std::align_val_t, const std::nothrow_t&) +def ZdlPvSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZdlPvSt11align_val_tRKSt9nothrow_t", + Void, [Ptr, IntPlus, Ptr]>; + +/// void operator delete(void*, unsigned int); +def ZdlPvj : TargetLibCall<"_ZdlPvj", Void, [Ptr, Int]>; + +/// void operator delete(void*, unsigned int, std::align_val_t) +def ZdlPvjSt11align_val_t + : TargetLibCall<"_ZdlPvjSt11align_val_t", Void, [Ptr, Int, Int]>; + +/// void operator delete(void*, unsigned long); +def ZdlPvm : TargetLibCall<"_ZdlPvm", Void, [Ptr, Long]>; + +/// void operator delete(void*, unsigned long, std::align_val_t) +def ZdlPvmSt11align_val_t + : TargetLibCall<"_ZdlPvmSt11align_val_t", Void, [Ptr, Long, Long]>; + +/// void *operator new[](unsigned int); +def Znaj : TargetLibCall<"_Znaj", Ptr, [Int]>; + +/// void *operator new](unsigned int, [const std::nothrow_t&); +def ZnajRKSt9nothrow_t : TargetLibCall<"_ZnajRKSt9nothrow_t", Ptr, [Int, Ptr]>; + +/// void *operator new](unsigned int, [std::align_val_t) +def ZnajSt11align_val_t + : TargetLibCall<"_ZnajSt11align_val_t", Ptr, [Int, Int]>; + +/// void *operator new](unsigned int, [std::align_val_t, const std::nothrow_t&) +def ZnajSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZnajSt11align_val_tRKSt9nothrow_t", Ptr, [Int, Int, Ptr]>; + +/// void *operator new[](unsigned long); +def Znam : TargetLibCall<"_Znam", Ptr, [Long]>; + +/// void *operator new](unsigned long, [__hot_cold_t) +/// Currently this and other operator new interfaces that take a __hot_cold_t +/// hint are supported by the open source version of tcmalloc, see: +/// https://github.com/google/tcmalloc/blob/master/tcmalloc/new_extension.h +/// and for the definition of the __hot_cold_t parameter see: +/// https://github.com/google/tcmalloc/blob/master/tcmalloc/malloc_extension.h +def Znam12__hot_cold_t + : TargetLibCall<"_Znam12__hot_cold_t", Ptr, [Long, Bool]>; + +/// void *operator new](unsigned long, [const std::nothrow_t&); +def ZnamRKSt9nothrow_t : TargetLibCall<"_ZnamRKSt9nothrow_t", Ptr, [Long, Ptr]>; + +/// void *operator new](unsigned long, [const std::nothrow_t&, __hot_cold_t) +def ZnamRKSt9nothrow_t12__hot_cold_t + : TargetLibCall<"_ZnamRKSt9nothrow_t12__hot_cold_t", + Ptr, [Long, Ptr, Bool]>; + +/// void *operator new](unsigned long, [std::align_val_t) +def ZnamSt11align_val_t + : TargetLibCall<"_ZnamSt11align_val_t", Ptr, [Long, Long]>; + +/// void *operator new](unsigned long, [std::align_val_t, __hot_cold_t) +def ZnamSt11align_val_t12__hot_cold_t + : TargetLibCall<"_ZnamSt11align_val_t12__hot_cold_t", + Ptr, [Long, Long, Bool]>; + +/// void *operator new](unsigned long, [std::align_val_t, const std::nothrow_t&) +def ZnamSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZnamSt11align_val_tRKSt9nothrow_t", + Ptr, [Long, Long, Ptr]>; + +/// void *operator new](unsigned long, [std::align_val_t, const std::nothrow_t&, +/// __hot_cold_t) +def ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t + : TargetLibCall<"_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t", + Ptr, [Long, Long, Ptr, Bool]>; + +/// void *operator new(unsigned int); +def Znwj : TargetLibCall<"_Znwj", Ptr, [Int]>; + +/// void *operator new(unsigned int, const std::nothrow_t&); +def ZnwjRKSt9nothrow_t : TargetLibCall<"_ZnwjRKSt9nothrow_t", Ptr, [Int, Ptr]>; + +/// void *operator new(unsigned int, std::align_val_t) +def ZnwjSt11align_val_t + : TargetLibCall<"_ZnwjSt11align_val_t", Ptr, [Int, Int]>; + +/// void *operator new(unsigned int, std::align_val_t, const std::nothrow_t&) +def ZnwjSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZnwjSt11align_val_tRKSt9nothrow_t", Ptr, [Int, Int, Ptr]>; + +/// void *operator new(unsigned long); +def Znwm : TargetLibCall<"_Znwm", Ptr, [Long]>; + +/// void *operator new(unsigned long, __hot_cold_t) +def Znwm12__hot_cold_t + : TargetLibCall<"_Znwm12__hot_cold_t", Ptr, [Long, Bool]>; + +/// void *operator new(unsigned long, const std::nothrow_t&); +def ZnwmRKSt9nothrow_t : TargetLibCall<"_ZnwmRKSt9nothrow_t", Ptr, [Long, Ptr]>; + +/// void *operator new(unsigned long, const std::nothrow_t&, __hot_cold_t) +def ZnwmRKSt9nothrow_t12__hot_cold_t + : TargetLibCall<"_ZnwmRKSt9nothrow_t12__hot_cold_t", + Ptr, [Long, Ptr, Bool]>; + +/// void *operator new(unsigned long, std::align_val_t) +def ZnwmSt11align_val_t + : TargetLibCall<"_ZnwmSt11align_val_t", Ptr, [Long, Long]>; + +/// void *operator new(unsigned long, std::align_val_t, __hot_cold_t) +def ZnwmSt11align_val_t12__hot_cold_t + : TargetLibCall<"_ZnwmSt11align_val_t12__hot_cold_t", + Ptr, [Long, Long, Bool]>; + +/// void *operator new(unsigned long, std::align_val_t, const std::nothrow_t&) +def ZnwmSt11align_val_tRKSt9nothrow_t + : TargetLibCall<"_ZnwmSt11align_val_tRKSt9nothrow_t", + Ptr, [Long, Long, Ptr]>; + +/// void *operator new(unsigned long, std::align_val_t, const std::nothrow_t&, +/// __hot_cold_t) +def ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t + : TargetLibCall<"_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t", + Ptr, [Long, Long, Ptr, Bool]>; + +/// The following are variants of operator new which return the actual size +/// reserved by the allocator proposed in P0901R5 (Size feedback in operator +/// new). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0901r5.html +/// They are implemented by tcmalloc, see source at +/// https://github.com/google/tcmalloc/blob/master/tcmalloc/malloc_extension.h + +/// __sized_ptr_t __size_returning_new(size_t size) +def size_returning_new + : TargetLibCall<"__size_returning_new", ? /* Checked manually. */>; + +/// __sized_ptr_t __size_returning_new_hot_cold(size_t, __hot_cold_t) +def size_returning_new_hot_cold + : TargetLibCall<"__size_returning_new_hot_cold", ? /* Checked manually. */>; + +/// __sized_ptr_t __size_returning_new_aligned(size_t, std::align_val_t) +def size_returning_new_aligned + : TargetLibCall<"__size_returning_new_aligned", ? /* Checked manually. */>; + +/// __sized_ptr_t __size_returning_new_aligned(size_t, std::align_val_t, +/// __hot_cold_t) +def size_returning_new_aligned_hot_cold + : TargetLibCall<"__size_returning_new_aligned_hot_cold", + ? /* Checked manually. */>; + +/// double __acos_finite(double x); +def acos_finite : TargetLibCall<"__acos_finite", Dbl, [Dbl]>; + +/// float __acosf_finite(float x); +def acosf_finite : TargetLibCall<"__acosf_finite", Flt, [Flt]>; + +/// double __acosh_finite(double x); +def acosh_finite : TargetLibCall<"__acosh_finite", Dbl, [Dbl]>; + +/// float __acoshf_finite(float x); +def acoshf_finite : TargetLibCall<"__acoshf_finite", Flt, [Flt]>; + +/// long double __acoshl_finite(long double x); +def acoshl_finite : TargetLibCall<"__acoshl_finite", LDbl, [LDbl]>; + +/// long double __acosl_finite(long double x); +def acosl_finite : TargetLibCall<"__acosl_finite", LDbl, [LDbl]>; + +/// double __asin_finite(double x); +def asin_finite : TargetLibCall<"__asin_finite", Dbl, [Dbl]>; + +/// float __asinf_finite(float x); +def asinf_finite : TargetLibCall<"__asinf_finite", Flt, [Flt]>; + +/// long double __asinl_finite(long double x); +def asinl_finite : TargetLibCall<"__asinl_finite", LDbl, [LDbl]>; + +/// double atan2_finite(double y, double x); +def atan2_finite : TargetLibCall<"__atan2_finite", Dbl, [Dbl, Dbl]>; + +/// float atan2f_finite(float y, float x); +def atan2f_finite : TargetLibCall<"__atan2f_finite", Flt, [Flt, Flt]>; + +/// long double atan2l_finite(long double y, long double x); +def atan2l_finite : TargetLibCall<"__atan2l_finite", LDbl, [LDbl, LDbl]>; + +/// double __atanh_finite(double x); +def atanh_finite : TargetLibCall<"__atanh_finite", Dbl, [Dbl]>; + +/// float __atanhf_finite(float x); +def atanhf_finite : TargetLibCall<"__atanhf_finite", Flt, [Flt]>; + +/// long double __atanhl_finite(long double x); +def atanhl_finite : TargetLibCall<"__atanhl_finite", LDbl, [LDbl]>; + +/// void __atomic_load(size_t size, void *mptr, void *vptr, int smodel); +def atomic_load : TargetLibCall<"__atomic_load", Void, [SizeT, Ptr, Ptr, Int]>; + +/// void __atomic_store(size_t size, void *mptr, void *vptr, int smodel); +def atomic_store + : TargetLibCall<"__atomic_store", Void, [SizeT, Ptr, Ptr, Int]>; + +/// double __cosh_finite(double x); +def cosh_finite : TargetLibCall<"__cosh_finite", Dbl, [Dbl]>; + +/// float __coshf_finite(float x); +def coshf_finite : TargetLibCall<"__coshf_finite", Flt, [Flt]>; + +/// long double __coshl_finite(long double x); +def coshl_finite : TargetLibCall<"__coshl_finite", LDbl, [LDbl]>; + +/// double __cospi(double x); +def cospi : TargetLibCall<"__cospi", Dbl, [Dbl]>; + +/// float __cospif(float x); +def cospif : TargetLibCall<"__cospif", Flt, [Flt]>; + +/// int __cxa_atexit(void (*f)(void *), void *p, void *d); +def cxa_atexit : TargetLibCall<"__cxa_atexit", Int, [Ptr, Ptr, Ptr]>; + +/// int atexit(void (*f)(void)); +def atexit : TargetLibCall<"atexit", Int, [Ptr]>; + +/// void abort(void) +def abort : TargetLibCall<"abort", Void, []>; + +/// void exit(int) +def exit : TargetLibCall<"exit", Void, [Int]>; + +/// void _Exit(int) +def Exit : TargetLibCall<"_Exit", Void, [Int]>; + +/// void std::terminate(); +def terminate : TargetLibCall<"_ZSt9terminatev", Void, []>; + +/// void __cxa_throw(void *, void *, void (*)(void *)); +def cxa_throw : TargetLibCall<"__cxa_throw", Void, [Ptr, Ptr, Ptr]>; + +/// void __cxa_guard_abort(guard_t *guard); +/// guard_t is int64_t in Itanium ABI or int32_t on ARM eabi. +def cxa_guard_abort : TargetLibCall<"__cxa_guard_abort", Void, [Ptr]>; + +/// int __cxa_guard_acquire(guard_t *guard); +def cxa_guard_acquire : TargetLibCall<"__cxa_guard_acquire", Int, [Ptr]>; + +/// void __cxa_guard_release(guard_t *guard); +def cxa_guard_release : TargetLibCall<"__cxa_guard_release", Void, [Ptr]>; + +/// double __exp10_finite(double x); +def exp10_finite : TargetLibCall<"__exp10_finite", Dbl, [Dbl]>; + +/// float __exp10f_finite(float x); +def exp10f_finite : TargetLibCall<"__exp10f_finite", Flt, [Flt]>; + +/// long double __exp10l_finite(long double x); +def exp10l_finite : TargetLibCall<"__exp10l_finite", LDbl, [LDbl]>; + +/// double __exp2_finite(double x); +def exp2_finite : TargetLibCall<"__exp2_finite", Dbl, [Dbl]>; + +/// float __exp2f_finite(float x); +def exp2f_finite : TargetLibCall<"__exp2f_finite", Flt, [Flt]>; + +/// long double __exp2l_finite(long double x); +def exp2l_finite : TargetLibCall<"__exp2l_finite", LDbl, [LDbl]>; + +/// double __exp_finite(double x); +def exp_finite : TargetLibCall<"__exp_finite", Dbl, [Dbl]>; + +/// float __expf_finite(float x); +def expf_finite : TargetLibCall<"__expf_finite", Flt, [Flt]>; + +/// long double __expl_finite(long double x); +def expl_finite : TargetLibCall<"__expl_finite", LDbl, [LDbl]>; + +/// int __isoc99_scanf (const char *format, ...) +def dunder_isoc99_scanf : TargetLibCall<"__isoc99_scanf", Int, [Ptr, Ellip]>; + +/// int __isoc99_sscanf(const char *s, const char *format, ...) +def dunder_isoc99_sscanf + : TargetLibCall<"__isoc99_sscanf", Int, [Ptr, Ptr, Ellip]>; + +/// void* __kmpc_alloc_shared(size_t nbyte); +def __kmpc_alloc_shared : TargetLibCall<"__kmpc_alloc_shared", Ptr, [SizeT]>; + +/// void __kmpc_free_shared(void *ptr, size_t nbyte); +def __kmpc_free_shared + : TargetLibCall<"__kmpc_free_shared", Void, [Ptr, SizeT]>; + +/// double __log10_finite(double x); +def log10_finite : TargetLibCall<"__log10_finite", Dbl, [Dbl]>; + +/// float __log10f_finite(float x); +def log10f_finite : TargetLibCall<"__log10f_finite", Flt, [Flt]>; + +/// long double __log10l_finite(long double x); +def log10l_finite : TargetLibCall<"__log10l_finite", LDbl, [LDbl]>; + +/// double __log2_finite(double x); +def log2_finite : TargetLibCall<"__log2_finite", Dbl, [Dbl]>; + +/// float __log2f_finite(float x); +def log2f_finite : TargetLibCall<"__log2f_finite", Flt, [Flt]>; + +/// long double __log2l_finite(long double x); +def log2l_finite : TargetLibCall<"__log2l_finite", LDbl, [LDbl]>; + +/// double __log_finite(double x); +def log_finite : TargetLibCall<"__log_finite", Dbl, [Dbl]>; + +/// float __logf_finite(float x); +def logf_finite : TargetLibCall<"__logf_finite", Flt, [Flt]>; + +/// long double __logl_finite(long double x); +def logl_finite : TargetLibCall<"__logl_finite", LDbl, [LDbl]>; + +/// void *__memccpy_chk(void *dst, const void *src, int c, size_t n, +/// size_t dstsize) +def memccpy_chk + : TargetLibCall<"__memccpy_chk", Ptr, [Ptr, Ptr, Int, SizeT, SizeT]>; + +/// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size); +def memcpy_chk : TargetLibCall<"__memcpy_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// void *__memmove_chk(void *s1, const void *s2, size_t n, size_t s1size); +def memmove_chk : TargetLibCall<"__memmove_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// void *__mempcpy_chk(void *s1, const void *s2, size_t n, size_t s1size); +def mempcpy_chk : TargetLibCall<"__mempcpy_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// void *__memset_chk(void *s, int v, size_t n, size_t s1size); +def memset_chk : TargetLibCall<"__memset_chk", Ptr, [Ptr, Int, SizeT, SizeT]>; + +// int __nvvm_reflect(const char *) +def nvvm_reflect : TargetLibCall<"__nvvm_reflect", Int, [Ptr]>; + +/// double __pow_finite(double x, double y); +def pow_finite : TargetLibCall<"__pow_finite", Dbl, [Dbl, Dbl]>; + +/// float _powf_finite(float x, float y); +def powf_finite : TargetLibCall<"__powf_finite", Flt, [Flt, Flt]>; + +/// long double __powl_finite(long double x, long double y); +def powl_finite : TargetLibCall<"__powl_finite", LDbl, [LDbl, LDbl]>; + +/// double __sincospi_stret(double x); +def sincospi_stret + : TargetLibCall<"__sincospi_stret", ? /* Checked manually. */>; + +/// float __sincospif_stret(float x); +def sincospif_stret + : TargetLibCall<"__sincospif_stret", ? /* Checked manually. */>; + +/// double __sinh_finite(double x); +def sinh_finite : TargetLibCall<"__sinh_finite", Dbl, [Dbl]>; + +/// float _sinhf_finite(float x); +def sinhf_finite : TargetLibCall<"__sinhf_finite", Flt, [Flt]>; + +/// long double __sinhl_finite(long double x); +def sinhl_finite : TargetLibCall<"__sinhl_finite", LDbl, [LDbl]>; + +/// double __sinpi(double x); +def sinpi : TargetLibCall<"__sinpi", Dbl, [Dbl]>; + +/// float __sinpif(float x); +def sinpif : TargetLibCall<"__sinpif", Flt, [Flt]>; + +/// int __small_fprintf(FILE *stream, const char *format, ...); +def small_fprintf : TargetLibCall<"__small_fprintf", Int, [Ptr, Ptr, Ellip]>; + +/// int __small_printf(const char *format, ...); +def small_printf : TargetLibCall<"__small_printf", Int, [Ptr, Ellip]>; + +/// int __small_sprintf(char *str, const char *format, ...); +def small_sprintf : TargetLibCall<"__small_sprintf", Int, [Ptr, Ptr, Ellip]>; + +/// int __snprintf_chk(char *s, size_t n, int flags, size_t slen, +/// const char *format, ...); +def snprintf_chk : TargetLibCall<"__snprintf_chk", + Int, [Ptr, SizeT, Int, SizeT, Ptr, Ellip]>; + +/// int __sprintf_chk(char *str, int flags, size_t str_len, +/// const char *format, ...); +def sprintf_chk + : TargetLibCall<"__sprintf_chk", Int, [Ptr, Int, SizeT, Ptr, Ellip]>; + +/// double __sqrt_finite(double x); +def sqrt_finite : TargetLibCall<"__sqrt_finite", Dbl, [Dbl]>; + +/// float __sqrt_finite(float x); +def sqrtf_finite : TargetLibCall<"__sqrtf_finite", Flt, [Flt]>; + +/// long double __sqrt_finite(long double x); +def sqrtl_finite : TargetLibCall<"__sqrtl_finite", LDbl, [LDbl]>; + +/// char *__stpcpy_chk(char *s1, const char *s2, size_t s1size); +def stpcpy_chk : TargetLibCall<"__stpcpy_chk", Ptr, [Ptr, Ptr, SizeT]>; + +/// char *__stpncpy_chk(char *s1, const char *s2, size_t n, size_t s1size); +def stpncpy_chk : TargetLibCall<"__stpncpy_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// char *__strcat_chk(char *s1, const char *s2, size_t s1size); +def strcat_chk : TargetLibCall<"__strcat_chk", Ptr, [Ptr, Ptr, SizeT]>; + +/// char *__strcpy_chk(char *s1, const char *s2, size_t s1size); +def strcpy_chk : TargetLibCall<"__strcpy_chk", Ptr, [Ptr, Ptr, SizeT]>; + +/// char * __strdup(const char *s); +def dunder_strdup : TargetLibCall<"__strdup", Ptr, [Ptr]>; + +/// size_t __strlcat_chk(char *dst, const char *src, size_t size, +/// size_t dstsize); +def strlcat_chk + : TargetLibCall<"__strlcat_chk", SizeT, [Ptr, Ptr, SizeT, SizeT]>; + +/// size_t __strlcpy_chk(char *dst, const char *src, size_t size, +/// size_t dstsize); +def strlcpy_chk + : TargetLibCall<"__strlcpy_chk", SizeT, [Ptr, Ptr, SizeT, SizeT]>; + +/// size_t __strlen_chk(const char *s1, size_t s1size); +def strlen_chk : TargetLibCall<"__strlen_chk", SizeT, [Ptr, SizeT]>; + +/// char *strncat_chk(char *s1, const char *s2, size_t n, size_t s1size); +def strncat_chk : TargetLibCall<"__strncat_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// char *__strncpy_chk(char *s1, const char *s2, size_t n, size_t s1size); +def strncpy_chk : TargetLibCall<"__strncpy_chk", Ptr, [Ptr, Ptr, SizeT, SizeT]>; + +/// char *__strndup(const char *s, size_t n); +def dunder_strndup : TargetLibCall<"__strndup", Ptr, [Ptr, SizeT]>; + +/// char * __strtok_r(char *s, const char *delim, char **save_ptr); +def dunder_strtok_r : TargetLibCall<"__strtok_r", Ptr, [Ptr, Ptr, Ptr]>; + +/// int __vsnprintf_chk(char *s, size_t n, int flags, size_t slen, +/// const char *format, va_list ap); +def vsnprintf_chk + : TargetLibCall<"__vsnprintf_chk", Int, [Ptr, SizeT, Int, SizeT, Ptr, Ptr]>; + +/// int __vsprintf_chk(char *s, int flags, size_t slen, const char *format, +/// va_list ap); +def vsprintf_chk + : TargetLibCall<"__vsprintf_chk", Int, [Ptr, Int, SizeT, Ptr, Ptr]>; + +/// int abs(int j); +def abs : TargetLibCall<"abs", Int, [Int]>; + +/// int access(const char *path, int amode); +def access : TargetLibCall<"access", Int, [Ptr, Int]>; + +/// double acos(double x); +def acos : TargetLibCall<"acos", Dbl, [Dbl]>; + +/// float acosf(float x); +def acosf : TargetLibCall<"acosf", Flt, [Flt]>; + +/// double acosh(double x); +def acosh : TargetLibCall<"acosh", Dbl, [Dbl]>; + +/// float acoshf(float x); +def acoshf : TargetLibCall<"acoshf", Flt, [Flt]>; + +/// long double acoshl(long double x); +def acoshl : TargetLibCall<"acoshl", LDbl, [LDbl]>; + +/// long double acosl(long double x); +def acosl : TargetLibCall<"acosl", LDbl, [LDbl]>; + +/// void *aligned_alloc(size_t alignment, size_t size); +def aligned_alloc : TargetLibCall<"aligned_alloc", Ptr, [SizeT, SizeT]>; + +/// double asin(double x); +def asin : TargetLibCall<"asin", Dbl, [Dbl]>; + +/// float asinf(float x); +def asinf : TargetLibCall<"asinf", Flt, [Flt]>; + +/// double asinh(double x); +def asinh : TargetLibCall<"asinh", Dbl, [Dbl]>; + +/// float asinhf(float x); +def asinhf : TargetLibCall<"asinhf", Flt, [Flt]>; + +/// long double asinhl(long double x); +def asinhl : TargetLibCall<"asinhl", LDbl, [LDbl]>; + +/// long double asinl(long double x); +def asinl : TargetLibCall<"asinl", LDbl, [LDbl]>; + +/// double atan(double x); +def atan : TargetLibCall<"atan", Dbl, [Dbl]>; + +/// double atan2(double y, double x); +def atan2 : TargetLibCall<"atan2", Dbl, [Dbl, Dbl]>; + +/// float atan2f(float y, float x); +def atan2f : TargetLibCall<"atan2f", Flt, [Flt, Flt]>; + +/// long double atan2l(long double y, long double x); +def atan2l : TargetLibCall<"atan2l", LDbl, [LDbl, LDbl]>; + +/// float atanf(float x); +def atanf : TargetLibCall<"atanf", Flt, [Flt]>; + +/// double atanh(double x); +def atanh : TargetLibCall<"atanh", Dbl, [Dbl]>; + +/// float atanhf(float x); +def atanhf : TargetLibCall<"atanhf", Flt, [Flt]>; + +/// long double atanhl(long double x); +def atanhl : TargetLibCall<"atanhl", LDbl, [LDbl]>; + +/// long double atanl(long double x); +def atanl : TargetLibCall<"atanl", LDbl, [LDbl]>; + +/// double atof(const char *str); +def atof : TargetLibCall<"atof", Dbl, [Ptr]>; + +/// int atoi(const char *str); +def atoi : TargetLibCall<"atoi", Int, [Ptr]>; + +/// long atol(const char *str); +def atol : TargetLibCall<"atol", Long, [Ptr]>; + +/// long long atoll(const char *nptr); +def atoll : TargetLibCall<"atoll", LLong, [Ptr]>; + +/// int bcmp(const void *s1, const void *s2, size_t n); +def bcmp : TargetLibCall<"bcmp", Int, [Ptr, Ptr, SizeT]>; + +/// void bcopy(const void *s1, void *s2, size_t n); +def bcopy : TargetLibCall<"bcopy", Void, [Ptr, Ptr, SizeT]>; + +/// void bzero(void *s, size_t n); +def bzero : TargetLibCall<"bzero", Void, [Ptr, SizeT]>; + +/// double cabs(double complex z) +def cabs : TargetLibCall<"cabs", ? /* Checked manually. */>; + +/// float cabs(float complex z) +def cabsf : TargetLibCall<"cabsf", ? /* Checked manually. */>; + +/// long double cabs(long double complex z) +def cabsl : TargetLibCall<"cabsl", ? /* Checked manually. */>; + +/// void *calloc(size_t count, size_t size); +def calloc : TargetLibCall<"calloc", Ptr, [SizeT, SizeT]>; + +/// double cbrt(double x); +def cbrt : TargetLibCall<"cbrt", Dbl, [Dbl]>; + +/// float cbrtf(float x); +def cbrtf : TargetLibCall<"cbrtf", Flt, [Flt]>; + +/// long double cbrtl(long double x); +def cbrtl : TargetLibCall<"cbrtl", LDbl, [LDbl]>; + +/// double ceil(double x); +def ceil : TargetLibCall<"ceil", Dbl, [Dbl]>; + +/// float ceilf(float x); +def ceilf : TargetLibCall<"ceilf", Flt, [Flt]>; + +/// long double ceill(long double x); +def ceill : TargetLibCall<"ceill", LDbl, [LDbl]>; + +/// int chmod(const char *path, mode_t mode); +def chmod : TargetLibCall<"chmod", Int, [Ptr, IntX]>; + +/// int chown(const char *path, uid_t owner, gid_t group); +def chown : TargetLibCall<"chown", Int, [Ptr, IntX, IntX]>; + +/// void clearerr(FILE *stream); +def clearerr : TargetLibCall<"clearerr", Void, [Ptr]>; + +/// int closedir(DIR *dirp); +def closedir : TargetLibCall<"closedir", Int, [Ptr]>; + +/// double copysign(double x, double y); +def copysign : TargetLibCall<"copysign", Dbl, [Dbl, Dbl]>; + +/// float copysignf(float x, float y); +def copysignf : TargetLibCall<"copysignf", Flt, [Flt, Flt]>; + +/// long double copysignl(long double x, long double y); +def copysignl : TargetLibCall<"copysignl", LDbl, [LDbl, LDbl]>; + +/// double cos(double x); +def cos : TargetLibCall<"cos", Dbl, [Dbl]>; + +/// float cosf(float x); +def cosf : TargetLibCall<"cosf", Flt, [Flt]>; + +/// double cosh(double x); +def cosh : TargetLibCall<"cosh", Dbl, [Dbl]>; + +/// float coshf(float x); +def coshf : TargetLibCall<"coshf", Flt, [Flt]>; + +/// long double coshl(long double x); +def coshl : TargetLibCall<"coshl", LDbl, [LDbl]>; + +/// long double cosl(long double x); +def cosl : TargetLibCall<"cosl", LDbl, [LDbl]>; + +/// char *ctermid(char *s); +def ctermid : TargetLibCall<"ctermid", Ptr, [Ptr]>; + +/// double erf(double x); +def erf : TargetLibCall<"erf", Dbl, [Dbl]>; + +/// float erff(float x); +def erff : TargetLibCall<"erff", Flt, [Flt]>; + +/// long double erfl(long double x); +def erfl : TargetLibCall<"erfl", LDbl, [LDbl]>; + +/// double tgamma(double x); +def tgamma : TargetLibCall<"tgamma", Dbl, [Dbl]>; + +/// float tgammaf(float x); +def tgammaf : TargetLibCall<"tgammaf", Flt, [Flt]>; + +/// long double tgammal(long double x); +def tgammal : TargetLibCall<"tgammal", LDbl, [LDbl]>; + +/// int execl(const char *path, const char *arg, ...); +def execl : TargetLibCall<"execl", Int, [Ptr, Ptr, Ellip]>; + +/// int execle(const char *file, const char *arg, ..., char * const envp[]); +def execle : TargetLibCall<"execle", Int, [Ptr, Ptr, Ellip]>; + +/// int execlp(const char *file, const char *arg, ...); +def execlp : TargetLibCall<"execlp", Int, [Ptr, Ptr, Ellip]>; + +/// int execv(const char *path, char *const argv[]); +def execv : TargetLibCall<"execv", Int, [Ptr, Ptr]>; + +/// int execvP(const char *file, const char *search_path, char *const argv[]); +def execvP : TargetLibCall<"execvP", Int, [Ptr, Ptr, Ptr]>; + +/// int execve(const char *filename, char *const argv], [char *const envp[]); +def execve : TargetLibCall<"execve", Int, [Ptr, Ptr, Ptr]>; + +/// int execvp(const char *file, char *const argv[]); +def execvp : TargetLibCall<"execvp", Int, [Ptr, Ptr]>; + +/// int execvpe(const char *file, char *const argv], [char *const envp[]); +def execvpe : TargetLibCall<"execvpe", Int, [Ptr, Ptr, Ptr]>; + +/// double exp(double x); +def exp : TargetLibCall<"exp", Dbl, [Dbl]>; + +/// double exp10(double x); +def exp10 : TargetLibCall<"exp10", Dbl, [Dbl]>; + +/// float exp10f(float x); +def exp10f : TargetLibCall<"exp10f", Flt, [Flt]>; + +/// long double exp10l(long double x); +def exp10l : TargetLibCall<"exp10l", LDbl, [LDbl]>; + +/// double exp2(double x); +def exp2 : TargetLibCall<"exp2", Dbl, [Dbl]>; + +/// float exp2f(float x); +def exp2f : TargetLibCall<"exp2f", Flt, [Flt]>; + +/// long double exp2l(long double x); +def exp2l : TargetLibCall<"exp2l", LDbl, [LDbl]>; + +/// float expf(float x); +def expf : TargetLibCall<"expf", Flt, [Flt]>; + +/// long double expl(long double x); +def expl : TargetLibCall<"expl", LDbl, [LDbl]>; + +/// double expm1(double x); +def expm1 : TargetLibCall<"expm1", Dbl, [Dbl]>; + +/// float expm1f(float x); +def expm1f : TargetLibCall<"expm1f", Flt, [Flt]>; + +/// long double expm1l(long double x); +def expm1l : TargetLibCall<"expm1l", LDbl, [LDbl]>; + +/// double fabs(double x); +def fabs : TargetLibCall<"fabs", Dbl, [Dbl]>; + +/// float fabsf(float x); +def fabsf : TargetLibCall<"fabsf", Flt, [Flt]>; + +/// long double fabsl(long double x); +def fabsl : TargetLibCall<"fabsl", LDbl, [LDbl]>; + +/// int fclose(FILE *stream); +def fclose : TargetLibCall<"fclose", Int, [Ptr]>; + +/// FILE *fdopen(int fildes, const char *mode); +def fdopen : TargetLibCall<"fdopen", Ptr, [Int, Ptr]>; + +/// int feof(FILE *stream); +def feof : TargetLibCall<"feof", Int, [Ptr]>; + +/// int ferror(FILE *stream); +def ferror : TargetLibCall<"ferror", Int, [Ptr]>; + +/// int fflush(FILE *stream); +def fflush : TargetLibCall<"fflush", Int, [Ptr]>; + +/// int ffs(int i); +def ffs : TargetLibCall<"ffs", Int, [Int]>; + +/// int ffsl(long int i); +def ffsl : TargetLibCall<"ffsl", Int, [Long]>; + +/// int ffsll(long long int i); +def ffsll : TargetLibCall<"ffsll", Int, [LLong]>; + +/// int fgetc(FILE *stream); +def fgetc : TargetLibCall<"fgetc", Int, [Ptr]>; + +/// int fgetc_unlocked(FILE *stream); +def fgetc_unlocked : TargetLibCall<"fgetc_unlocked", Int, [Ptr]>; + +/// int fgetpos(FILE *stream, fpos_t *pos); +def fgetpos : TargetLibCall<"fgetpos", Int, [Ptr, Ptr]>; + +/// char *fgets(char *s, int n, FILE *stream); +def fgets : TargetLibCall<"fgets", Ptr, [Ptr, Int, Ptr]>; + +/// char *fgets_unlocked(char *s, int n, FILE *stream); +def fgets_unlocked : TargetLibCall<"fgets_unlocked", Ptr, [Ptr, Int, Ptr]>; + +/// int fileno(FILE *stream); +def fileno : TargetLibCall<"fileno", Int, [Ptr]>; + +/// int fiprintf(FILE *stream, const char *format, ...); +def fiprintf : TargetLibCall<"fiprintf", Int, [Ptr, Ptr, Ellip]>; + +/// void flockfile(FILE *file); +def flockfile : TargetLibCall<"flockfile", Void, [Ptr]>; + +/// double floor(double x); +def floor : TargetLibCall<"floor", Dbl, [Dbl]>; + +/// float floorf(float x); +def floorf : TargetLibCall<"floorf", Flt, [Flt]>; + +/// long double floorl(long double x); +def floorl : TargetLibCall<"floorl", LDbl, [LDbl]>; + +/// int fls(int i); +def fls : TargetLibCall<"fls", Int, [Int]>; + +/// int flsl(long int i); +def flsl : TargetLibCall<"flsl", Int, [Long]>; + +/// int flsll(long long int i); +def flsll : TargetLibCall<"flsll", Int, [LLong]>; + +// Calls to fmax and fmin library functions expand to the llvm.maxnnum and +// llvm.minnum intrinsics with the correct parameter types for the arguments +// (all types must match). +/// double fmax(double x, double y); +def fmax : TargetLibCall<"fmax", Floating, [Same, Same]>; + +/// float fmaxf(float x, float y); +def fmaxf : TargetLibCall<"fmaxf", Floating, [Same, Same]>; + +/// long double fmaxl(long double x, long double y); +def fmaxl : TargetLibCall<"fmaxl", Floating, [Same, Same]>; + +/// double fmin(double x, double y); +def fmin : TargetLibCall<"fmin", Floating, [Same, Same]>; + +/// float fminf(float x, float y); +def fminf : TargetLibCall<"fminf", Floating, [Same, Same]>; + +/// long double fminl(long double x, long double y); +def fminl : TargetLibCall<"fminl", Floating, [Same, Same]>; + +// Calls to fmaximum_num and fminimum_num library functions expand to the +// llvm.maximumnum and llvm.minimumnum intrinsics with the correct parameter +// types for the arguments (all types must match). +/// double fmaximum_num(double x, double y); +def fmaximum_num : TargetLibCall<"fmaximum_num", Floating, [Same, Same]>; + +/// float fmaximum_numf(float x, float y); +def fmaximum_numf : TargetLibCall<"fmaximum_numf", Floating, [Same, Same]>; + +/// long double fmaximum_numl(long double x, long double y); +def fmaximum_numl : TargetLibCall<"fmaximum_numl", Floating, [Same, Same]>; + +/// double fminimum_num(double x, double y); +def fminimum_num : TargetLibCall<"fminimum_num", Floating, [Same, Same]>; + +/// float fminimum_numf(float x, float y); +def fminimum_numf : TargetLibCall<"fminimum_numf", Floating, [Same, Same]>; + +/// long double fminimum_numl(long double x, long double y); +def fminimum_numl : TargetLibCall<"fminimum_numl", Floating, [Same, Same]>; + +/// double fmod(double x, double y); +def fmod : TargetLibCall<"fmod", Dbl, [Dbl, Dbl]>; + +/// float fmodf(float x, float y); +def fmodf : TargetLibCall<"fmodf", Flt, [Flt, Flt]>; + +/// long double fmodl(long double x, long double y); +def fmodl : TargetLibCall<"fmodl", LDbl, [LDbl, LDbl]>; + +/// FILE *fopen(const char *filename, const char *mode); +def fopen : TargetLibCall<"fopen", Ptr, [Ptr, Ptr]>; + +/// FILE *fopen64(const char *filename, const char *opentype) +def fopen64 : TargetLibCall<"fopen64", Ptr, [Ptr, Ptr]>; + +/// int fork(); +def fork : TargetLibCall<"fork", Int, []>; + +/// int fprintf(FILE *stream, const char *format, ...); +def fprintf : TargetLibCall<"fprintf", Int, [Ptr, Ptr, Ellip]>; + +/// int fputc(int c, FILE *stream); +def fputc : TargetLibCall<"fputc", Int, [Int, Ptr]>; + +/// int fputc_unlocked(int c, FILE *stream); +def fputc_unlocked : TargetLibCall<"fputc_unlocked", Int, [Int, Ptr]>; + +/// int fputs(const char *s, FILE *stream); +def fputs : TargetLibCall<"fputs", Int, [Ptr, Ptr]>; + +/// int fputs_unlocked(const char *s, FILE *stream); +def fputs_unlocked : TargetLibCall<"fputs_unlocked", Int, [Ptr, Ptr]>; + +/// size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream); +def fread : TargetLibCall<"fread", SizeT, [Ptr, SizeT, SizeT, Ptr]>; + +/// size_t fread_unlocked(void *ptr, size_t size, size_t nitems, FILE *stream); +def fread_unlocked + : TargetLibCall<"fread_unlocked", SizeT, [Ptr, SizeT, SizeT, Ptr]>; + +/// void free(void *ptr); +def free : TargetLibCall<"free", Void, [Ptr]>; + +/// double frexp(double num, int *exp); +def frexp : TargetLibCall<"frexp", Dbl, [Dbl, Ptr]>; + +/// float frexpf(float num, int *exp); +def frexpf : TargetLibCall<"frexpf", Flt, [Flt, Ptr]>; + +/// long double frexpl(long double num, int *exp); +def frexpl : TargetLibCall<"frexpl", LDbl, [LDbl, Ptr]>; + +/// int fscanf(FILE *stream, const char *format, ... ); +def fscanf : TargetLibCall<"fscanf", Int, [Ptr, Ptr, Ellip]>; + +/// int fseek(FILE *stream, long offset, int whence); +def fseek : TargetLibCall<"fseek", Int, [Ptr, Long, Int]>; + +/// int fseeko(FILE *stream, off_t offset, int whence); +def fseeko : TargetLibCall<"fseeko", Int, [Ptr, IntX, Int]>; + +/// int fseeko64(FILE *stream, off64_t offset, int whence) +def fseeko64 : TargetLibCall<"fseeko64", Int, [Ptr, Int64, Int]>; + +/// int fsetpos(FILE *stream, const fpos_t *pos); +def fsetpos : TargetLibCall<"fsetpos", Int, [Ptr, Ptr]>; + +/// int fstat(int fildes, struct stat *buf); +def fstat : TargetLibCall<"fstat", Int, [Int, Ptr]>; + +/// int fstat64(int filedes, struct stat64 *buf) +def fstat64 : TargetLibCall<"fstat64", Int, [Int, Ptr]>; + +/// int fstatvfs(int fildes, struct statvfs *buf); +def fstatvfs : TargetLibCall<"fstatvfs", Int, [Int, Ptr]>; + +/// int fstatvfs64(int fildes, struct statvfs64 *buf); +def fstatvfs64 : TargetLibCall<"fstatvfs64", Int, [Int, Ptr]>; + +/// long ftell(FILE *stream); +def ftell : TargetLibCall<"ftell", Long, [Ptr]>; + +/// off_t ftello(FILE *stream); +def ftello : TargetLibCall<"ftello", IntPlus, [Ptr]>; + +/// off64_t ftello64(FILE *stream) +def ftello64 : TargetLibCall<"ftello64", Int64, [Ptr]>; + +/// int ftrylockfile(FILE *file); +def ftrylockfile : TargetLibCall<"ftrylockfile", Int, [Ptr]>; + +/// void funlockfile(FILE *file); +def funlockfile : TargetLibCall<"funlockfile", Void, [Ptr]>; + +/// size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream); +def fwrite : TargetLibCall<"fwrite", SizeT, [Ptr, SizeT, SizeT, Ptr]>; + +/// size_t fwrite_unlocked(const void *ptr, size_t size, size_t nitems, +/// FILE *stream); +def fwrite_unlocked + : TargetLibCall<"fwrite_unlocked", SizeT, [Ptr, SizeT, SizeT, Ptr]>; + +/// int getc(FILE *stream); +def getc : TargetLibCall<"getc", Int, [Ptr]>; + +/// int getc_unlocked(FILE *stream); +def getc_unlocked : TargetLibCall<"getc_unlocked", Int, [Ptr]>; + +/// int getchar(void); +def getchar : TargetLibCall<"getchar", Int, []>; + +/// int getchar_unlocked(void); +def getchar_unlocked : TargetLibCall<"getchar_unlocked", Int, []>; + +/// char *getenv(const char *name); +def getenv : TargetLibCall<"getenv", Ptr, [Ptr]>; + +/// int getitimer(int which, struct itimerval *value); +def getitimer : TargetLibCall<"getitimer", Int, [Int, Ptr]>; + +/// int getlogin_r(char *name, size_t namesize); +def getlogin_r : TargetLibCall<"getlogin_r", Int, [Ptr, SizeT]>; + +/// struct passwd *getpwnam(const char *name); +def getpwnam : TargetLibCall<"getpwnam", Ptr, [Ptr]>; + +/// char *gets(char *s); +def gets : TargetLibCall<"gets", Ptr, [Ptr]>; + +/// int gettimeofday(struct timeval *tp, void *tzp); +def gettimeofday : TargetLibCall<"gettimeofday", Int, [Ptr, Ptr]>; + +/// uint32_t htonl(uint32_t hostlong); +def htonl : TargetLibCall<"htonl", Int32, [Int32]>; + +/// uint16_t htons(uint16_t hostshort); +def htons : TargetLibCall<"htons", Int16, [Int16]>; + +/// double hypot(double x, double y); +def hypot : TargetLibCall<"hypot", Dbl, [Dbl, Dbl]>; + +/// float hypotf(float x, float y); +def hypotf : TargetLibCall<"hypotf", Flt, [Flt, Flt]>; + +/// long double hypotl(long double x, long double y); +def hypotl : TargetLibCall<"hypotl", LDbl, [LDbl, LDbl]>; + +/// int iprintf(const char *format, ...); +def iprintf : TargetLibCall<"iprintf", Int, [Ptr, Ellip]>; + +/// int isascii(int c); +def isascii : TargetLibCall<"isascii", Int, [Int]>; + +/// int isdigit(int c); +def isdigit : TargetLibCall<"isdigit", Int, [Int]>; + +/// long int labs(long int j); +def labs : TargetLibCall<"labs", Long, [Same]>; + +/// int lchown(const char *path, uid_t owner, gid_t group); +def lchown : TargetLibCall<"lchown", Int, [Ptr, IntX, IntX]>; + +/// double ldexp(double x, int n); +def ldexp : TargetLibCall<"ldexp", Dbl, [Dbl, Int]>; + +/// float ldexpf(float x, int n); +def ldexpf : TargetLibCall<"ldexpf", Flt, [Flt, Int]>; + +/// long double ldexpl(long double x, int n); +def ldexpl : TargetLibCall<"ldexpl", LDbl, [LDbl, Int]>; + +/// long long int llabs(long long int j); +def llabs : TargetLibCall<"llabs", LLong, [LLong]>; + +/// double log(double x); +def log : TargetLibCall<"log", Dbl, [Dbl]>; + +/// double log10(double x); +def log10 : TargetLibCall<"log10", Dbl, [Dbl]>; + +/// float log10f(float x); +def log10f : TargetLibCall<"log10f", Flt, [Flt]>; + +/// long double log10l(long double x); +def log10l : TargetLibCall<"log10l", LDbl, [LDbl]>; + +/// double log1p(double x); +def log1p : TargetLibCall<"log1p", Dbl, [Dbl]>; + +/// float log1pf(float x); +def log1pf : TargetLibCall<"log1pf", Flt, [Flt]>; + +/// long double log1pl(long double x); +def log1pl : TargetLibCall<"log1pl", LDbl, [LDbl]>; + +/// double log2(double x); +def log2 : TargetLibCall<"log2", Dbl, [Dbl]>; + +/// float log2f(float x); +def log2f : TargetLibCall<"log2f", Flt, [Flt]>; + +/// double long double log2l(long double x); +def log2l : TargetLibCall<"log2l", LDbl, [LDbl]>; + +/// int ilogb(double x); +def ilogb : TargetLibCall<"ilogb", Int, [Dbl]>; + +/// int ilogbf(float x); +def ilogbf : TargetLibCall<"ilogbf", Int, [Flt]>; + +/// int ilogbl(long double x); +def ilogbl : TargetLibCall<"ilogbl", Int, [LDbl]>; + +/// double logb(double x); +def logb : TargetLibCall<"logb", Dbl, [Dbl]>; + +/// float logbf(float x); +def logbf : TargetLibCall<"logbf", Flt, [Flt]>; + +/// long double logbl(long double x); +def logbl : TargetLibCall<"logbl", LDbl, [LDbl]>; + +/// float logf(float x); +def logf : TargetLibCall<"logf", Flt, [Flt]>; + +/// long double logl(long double x); +def logl : TargetLibCall<"logl", LDbl, [LDbl]>; + +/// int lstat(const char *path, struct stat *buf); +def lstat : TargetLibCall<"lstat", Int, [Ptr, Ptr]>; + +/// int lstat64(const char *path, struct stat64 *buf); +def lstat64 : TargetLibCall<"lstat64", Int, [Ptr, Ptr]>; + +/// void *malloc(size_t size); +def malloc : TargetLibCall<"malloc", Ptr, [SizeT]>; + +/// void *memalign(size_t boundary, size_t size); +def memalign : TargetLibCall<"memalign", Ptr, [SizeT, SizeT]>; + +/// void *memccpy(void *s1, const void *s2, int c, size_t n); +def memccpy : TargetLibCall<"memccpy", Ptr, [Ptr, Ptr, Int, SizeT]>; + +/// void *memchr(const void *s, int c, size_t n); +def memchr : TargetLibCall<"memchr", Ptr, [Ptr, Int, SizeT]>; + +/// int memcmp(const void *s1, const void *s2, size_t n); +def memcmp : TargetLibCall<"memcmp", Int, [Ptr, Ptr, SizeT]>; + +/// void *memcpy(void *s1, const void *s2, size_t n); +def memcpy : TargetLibCall<"memcpy", Ptr, [Ptr, Ptr, SizeT]>; + +/// void *memmove(void *s1, const void *s2, size_t n); +def memmove : TargetLibCall<"memmove", Ptr, [Ptr, Ptr, SizeT]>; + +/// void *mempcpy(void *s1, const void *s2, size_t n); +def mempcpy : TargetLibCall<"mempcpy", Ptr, [Ptr, Ptr, SizeT]>; + +/// void *memrchr(const void *s, int c, size_t n); +def memrchr : TargetLibCall<"memrchr", Ptr, [Ptr, Int, SizeT]>; + +/// void *memset(void *b, int c, size_t len); +def memset : TargetLibCall<"memset", Ptr, [Ptr, Int, SizeT]>; + +/// void memset_pattern16(void *b, const void *pattern16, size_t len); +def memset_pattern16 + : TargetLibCall<"memset_pattern16", Void, [Ptr, Ptr, SizeT]>; + +/// void memset_pattern4(void *b, const void *pattern4, size_t len); +def memset_pattern4 : TargetLibCall<"memset_pattern4", Void, [Ptr, Ptr, SizeT]>; + +/// void memset_pattern8(void *b, const void *pattern8, size_t len); +def memset_pattern8 : TargetLibCall<"memset_pattern8", Void, [Ptr, Ptr, SizeT]>; + +/// int mkdir(const char *path, mode_t mode); +def mkdir : TargetLibCall<"mkdir", Int, [Ptr, IntX]>; + +/// time_t mktime(struct tm *timeptr); +def mktime : TargetLibCall<"mktime", IntPlus, [Ptr]>; + +/// double modf(double x, double *iptr); +def modf : TargetLibCall<"modf", Dbl, [Dbl, Ptr]>; + +/// float modff(float, float *iptr); +def modff : TargetLibCall<"modff", Flt, [Flt, Ptr]>; + +/// long double modfl(long double value, long double *iptr); +def modfl : TargetLibCall<"modfl", LDbl, [LDbl, Ptr]>; + +/// double nan(const char *arg); +def nan : TargetLibCall<"nan", Dbl, [Ptr]>; + +/// float nanf(const char *arg); +def nanf : TargetLibCall<"nanf", Flt, [Ptr]>; + +/// long double nanl(const char *arg); +def nanl : TargetLibCall<"nanl", LDbl, [Ptr]>; + +/// double nearbyint(double x); +def nearbyint : TargetLibCall<"nearbyint", Dbl, [Dbl]>; + +/// float nearbyintf(float x); +def nearbyintf : TargetLibCall<"nearbyintf", Flt, [Flt]>; + +/// long double nearbyintl(long double x); +def nearbyintl : TargetLibCall<"nearbyintl", LDbl, [LDbl]>; + +/// double nextafter(double x, double y); +def nextafter : TargetLibCall< "nextafter", Dbl, [Dbl, Dbl]>; + +/// float nextafterf(float x, float y); +def nextafterf : TargetLibCall< "nextafterf", Flt, [Flt, Flt]>; + +/// long double nextafterl(long double x, long double y); +def nextafterl : TargetLibCall< "nextafterl", LDbl, [LDbl, LDbl]>; + +/// double nexttoward(double x, long double y); +def nexttoward : TargetLibCall< "nexttoward", Dbl, [Dbl, LDbl]>; + +/// float nexttowardf(float x, long double y); +def nexttowardf : TargetLibCall< "nexttowardf", Flt, [Flt, LDbl]>; + +/// long double nexttowardl(long double x, long double y); +def nexttowardl : TargetLibCall< "nexttowardl", LDbl, [LDbl, LDbl]>; + +/// uint32_t ntohl(uint32_t netlong); +def ntohl : TargetLibCall<"ntohl", Int32, [Int32]>; + +/// uint16_t ntohs(uint16_t netshort); +def ntohs : TargetLibCall<"ntohs", Int16, [Int16]>; + +/// int open(const char *path, int oflag, ... ); +def open : TargetLibCall<"open", Int, [Ptr, Int, Ellip]>; + +/// int open64(const char *filename, int flags, [mode_t mode]) +def open64 : TargetLibCall<"open64", Int, [Ptr, Int, Ellip]>; + +/// DIR *opendir(const char *dirname); +def opendir : TargetLibCall<"opendir", Ptr, [Ptr]>; + +/// int pclose(FILE *stream); +def pclose : TargetLibCall<"pclose", Int, [Ptr]>; + +/// void perror(const char *s); +def perror : TargetLibCall<"perror", Void, [Ptr]>; + +/// FILE *popen(const char *command, const char *mode); +def popen : TargetLibCall<"popen", Ptr, [Ptr, Ptr]>; + +/// int posix_memalign(void **memptr, size_t alignment, size_t size); +def posix_memalign : TargetLibCall<"posix_memalign", Int, [Ptr, SizeT, SizeT]>; + +/// double pow(double x, double y); +def pow : TargetLibCall<"pow", Dbl, [Dbl, Dbl]>; + +/// float powf(float x, float y); +def powf : TargetLibCall<"powf", Flt, [Flt, Flt]>; + +/// long double powl(long double x, long double y); +def powl : TargetLibCall<"powl", LDbl, [LDbl, LDbl]>; + +/// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset); +def pread : TargetLibCall<"pread", SSizeT, [Int, Ptr, SizeT, IntPlus]>; + +/// int printf(const char *format, ...); +def printf : TargetLibCall<"printf", Int, [Ptr, Ellip]>; + +/// int putc(int c, FILE *stream); +def putc : TargetLibCall<"putc", Int, [Int, Ptr]>; + +/// int putc_unlocked(int c, FILE *stream); +def putc_unlocked : TargetLibCall<"putc_unlocked", Int, [Int, Ptr]>; + +/// int putchar(int c); +def putchar : TargetLibCall<"putchar", Int, [Int]>; + +/// int putchar_unlocked(int c); +def putchar_unlocked : TargetLibCall<"putchar_unlocked", Int, [Int]>; + +/// int puts(const char *s); +def puts : TargetLibCall<"puts", Int, [Ptr]>; + +/// void *pvalloc(size_t size); +def pvalloc : TargetLibCall<"pvalloc", Ptr, [SizeT]>; + +/// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset); +def pwrite : TargetLibCall<"pwrite", SSizeT, [Int, Ptr, SizeT, IntPlus]>; + +/// void qsort(void *base, size_t nel, size_t width, +/// int (*compar)(const void *, const void *)); +def qsort : TargetLibCall<"qsort", Void, [Ptr, SizeT, SizeT, Ptr]>; + +/// ssize_t read(int fildes, void *buf, size_t nbyte); +def read : TargetLibCall<"read", SSizeT, [Int, Ptr, SizeT]>; + +/// ssize_t readlink(const char *path, char *buf, size_t bufsize); +def readlink : TargetLibCall<"readlink", SSizeT, [Ptr, Ptr, SizeT]>; + +/// void *realloc(void *ptr, size_t size); +def realloc : TargetLibCall<"realloc", Ptr, [Ptr, SizeT]>; + +/// void *reallocf(void *ptr, size_t size); +def reallocf : TargetLibCall<"reallocf", Ptr, [Ptr, SizeT]>; + +/// void *reallocarray(void *ptr, size_t nmemb, size_t size); +def reallocarray : TargetLibCall<"reallocarray", Ptr, [Ptr, SizeT, SizeT]>; + +/// char *realpath(const char *file_name, char *resolved_name); +def realpath : TargetLibCall<"realpath", Ptr, [Ptr, Ptr]>; + +/// double remainder(double x, double y); +def remainder : TargetLibCall<"remainder", Dbl, [Dbl, Dbl]>; + +/// float remainderf(float x, float y); +def remainderf : TargetLibCall<"remainderf", Flt, [Flt, Flt]>; + +/// long double remainderl(long double x, long double y); +def remainderl : TargetLibCall<"remainderl", LDbl, [LDbl, LDbl]>; + +/// double remquo(double x, double y, int *quo); +def remquo : TargetLibCall<"remquo", Dbl, [Dbl, Dbl, Ptr]>; + +/// float remquof(float x, float y, int *quo); +def remquof : TargetLibCall<"remquof", Flt, [Flt, Flt, Ptr]>; + +/// long double remquol(long double x, long double y, int *quo); +def remquol : TargetLibCall<"remquol", LDbl, [LDbl, LDbl, Ptr]>; + +/// double fdim(double x, double y); +def fdim : TargetLibCall<"fdim", Dbl, [Dbl, Dbl]>; + +/// float fdimf(float x, float y); +def fdimf : TargetLibCall<"fdimf", Flt, [Flt, Flt]>; + +/// long double fdiml(long double x, long double y); +def fdiml : TargetLibCall<"fdiml", LDbl, [LDbl, LDbl]>; + +/// int remove(const char *path); +def remove : TargetLibCall<"remove", Int, [Ptr]>; + +/// int rename(const char *old, const char *new); +def rename : TargetLibCall<"rename", Int, [Ptr, Ptr]>; + +/// void rewind(FILE *stream); +def rewind : TargetLibCall<"rewind", Void, [Ptr]>; + +/// double rint(double x); +def rint : TargetLibCall<"rint", Dbl, [Dbl]>; + +/// float rintf(float x); +def rintf : TargetLibCall<"rintf", Flt, [Flt]>; + +/// long double rintl(long double x); +def rintl : TargetLibCall<"rintl", LDbl, [LDbl]>; + +/// int rmdir(const char *path); +def rmdir : TargetLibCall<"rmdir", Int, [Ptr]>; + +/// double round(double x); +def round : TargetLibCall<"round", Dbl, [Dbl]>; + +/// double roundeven(double x); +def roundeven : TargetLibCall<"roundeven", Dbl, [Dbl]>; + +/// float roundevenf(float x); +def roundevenf : TargetLibCall<"roundevenf", Flt, [Flt]>; + +/// long double roundevenl(long double x); +def roundevenl : TargetLibCall<"roundevenl", LDbl, [LDbl]>; + +/// float roundf(float x); +def roundf : TargetLibCall<"roundf", Flt, [Flt]>; + +/// long double roundl(long double x); +def roundl : TargetLibCall<"roundl", LDbl, [LDbl]>; + +/// double scalbln(double arg, long exp); +def scalbln : TargetLibCall<"scalbln", Dbl, [Dbl, Long]>; + +/// float scalblnf(float arg, long exp); +def scalblnf : TargetLibCall<"scalblnf", Flt, [Flt, Long]>; + +/// long double scalblnl(long double arg, long exp); +def scalblnl : TargetLibCall<"scalblnl", LDbl, [LDbl, Long]>; + +/// double scalbn(double arg, int exp); +def scalbn : TargetLibCall<"scalbn", Dbl, [Dbl, Int]>; + +/// float scalbnf(float arg, int exp); +def scalbnf : TargetLibCall<"scalbnf", Flt, [Flt, Int]>; + +/// long double scalbnl(long double arg, int exp); +def scalbnl : TargetLibCall<"scalbnl", LDbl, [LDbl, Int]>; + +/// int scanf(const char *restrict format, ... ); +def scanf : TargetLibCall<"scanf", Int, [Ptr, Ellip]>; + +/// void setbuf(FILE *stream, char *buf); +def setbuf : TargetLibCall<"setbuf", Void, [Ptr, Ptr]>; + +/// int setitimer(int which, const struct itimerval *value, +/// struct itimerval *ovalue); +def setitimer : TargetLibCall<"setitimer", Int, [Int, Ptr, Ptr]>; + +/// int setvbuf(FILE *stream, char *buf, int type, size_t size); +def setvbuf : TargetLibCall<"setvbuf", Int, [Ptr, Ptr, Int, SizeT]>; + +/// double sin(double x); +def sin : TargetLibCall<"sin", Dbl, [Dbl]>; + +/// float sinf(float x); +def sinf : TargetLibCall<"sinf", Flt, [Flt]>; + +/// double sinh(double x); +def sinh : TargetLibCall<"sinh", Dbl, [Dbl]>; + +/// float sinhf(float x); +def sinhf : TargetLibCall<"sinhf", Flt, [Flt]>; + +/// long double sinhl(long double x); +def sinhl : TargetLibCall<"sinhl", LDbl, [LDbl]>; + +/// long double sinl(long double x); +def sinl : TargetLibCall<"sinl", LDbl, [LDbl]>; + +/// void sincos(double x, double *sin_out, double *cos_out); +def sincos : TargetLibCall<"sincos", Void, [Dbl, Ptr, Ptr]>; + +/// void sincosf(float x, float *sin_out, float *cos_out); +def sincosf : TargetLibCall<"sincosf", Void, [Flt, Ptr, Ptr]>; + +/// void sincosl(long double x, long double *sin_out, long double *cos_out); +def sincosl : TargetLibCall<"sincosl", Void, [LDbl, Ptr, Ptr]>; + +/// int siprintf(char *str, const char *format, ...); +def siprintf : TargetLibCall<"siprintf", Int, [Ptr, Ptr, Ellip]>; + +/// int snprintf(char *s, size_t n, const char *format, ...); +def snprintf : TargetLibCall<"snprintf", Int, [Ptr, SizeT, Ptr, Ellip]>; + +/// int sprintf(char *str, const char *format, ...); +def sprintf : TargetLibCall<"sprintf", Int, [Ptr, Ptr, Ellip]>; + +/// double sqrt(double x); +def sqrt : TargetLibCall<"sqrt", Dbl, [Dbl]>; + +/// float sqrtf(float x); +def sqrtf : TargetLibCall<"sqrtf", Flt, [Flt]>; + +/// long double sqrtl(long double x); +def sqrtl : TargetLibCall<"sqrtl", LDbl, [LDbl]>; + +/// int sscanf(const char *s, const char *format, ... ); +def sscanf : TargetLibCall<"sscanf", Int, [Ptr, Ptr, Ellip]>; + +/// int stat(const char *path, struct stat *buf); +def stat : TargetLibCall<"stat", Int, [Ptr, Ptr]>; + +/// int stat64(const char *path, struct stat64 *buf); +def stat64 : TargetLibCall<"stat64", Int, [Ptr, Ptr]>; + +/// int statvfs(const char *path, struct statvfs *buf); +def statvfs : TargetLibCall<"statvfs", Int, [Ptr, Ptr]>; + +/// int statvfs64(const char *path, struct statvfs64 *buf) +def statvfs64 : TargetLibCall<"statvfs64", Int, [Ptr, Ptr]>; + +/// char *stpcpy(char *s1, const char *s2); +def stpcpy : TargetLibCall<"stpcpy", Ptr, [Ptr, Ptr]>; + +/// char *stpncpy(char *s1, const char *s2, size_t n); +def stpncpy : TargetLibCall<"stpncpy", Ptr, [Ptr, Ptr, SizeT]>; + +/// int strcasecmp(const char *s1, const char *s2); +def strcasecmp : TargetLibCall<"strcasecmp", Int, [Ptr, Ptr]>; + +/// char *strcat(char *s1, const char *s2); +def strcat : TargetLibCall<"strcat", Ptr, [Ptr, Ptr]>; + +/// char *strchr(const char *s, int c); +def strchr : TargetLibCall<"strchr", Ptr, [Ptr, Int]>; + +/// int strcmp(const char *s1, const char *s2); +def strcmp : TargetLibCall<"strcmp", Int, [Ptr, Ptr]>; + +/// int strcoll(const char *s1, const char *s2); +def strcoll : TargetLibCall<"strcoll", Int, [Ptr, Ptr]>; + +/// char *strcpy(char *s1, const char *s2); +def strcpy : TargetLibCall<"strcpy", Ptr, [Ptr, Ptr]>; + +/// size_t strcspn(const char *s1, const char *s2); +def strcspn : TargetLibCall<"strcspn", SizeT, [Ptr, Ptr]>; + +/// char *strdup(const char *s1); +def strdup : TargetLibCall<"strdup", Ptr, [Ptr]>; + +/// size_t strlcat(char *dst, const char *src, size_t size); +def strlcat : TargetLibCall<"strlcat", SizeT, [Ptr, Ptr, SizeT]>; + +/// size_t strlcpy(char *dst, const char *src, size_t size); +def strlcpy : TargetLibCall<"strlcpy", SizeT, [Ptr, Ptr, SizeT]>; + +/// size_t strlen(const char *s); +def strlen : TargetLibCall<"strlen", SizeT, [Ptr]>; + +/// int strncasecmp(const char *s1, const char *s2, size_t n); +def strncasecmp : TargetLibCall<"strncasecmp", Int, [Ptr, Ptr, SizeT]>; + +/// char *strncat(char *s1, const char *s2, size_t n); +def strncat : TargetLibCall<"strncat", Ptr, [Ptr, Ptr, SizeT]>; + +/// int strncmp(const char *s1, const char *s2, size_t n); +def strncmp : TargetLibCall<"strncmp", Int, [Ptr, Ptr, SizeT]>; + +/// char *strncpy(char *s1, const char *s2, size_t n); +def strncpy : TargetLibCall<"strncpy", Ptr, [Ptr, Ptr, SizeT]>; + +/// char *strndup(const char *s1, size_t n); +def strndup : TargetLibCall<"strndup", Ptr, [Ptr, SizeT]>; + +/// size_t strnlen(const char *s, size_t maxlen); +def strnlen : TargetLibCall<"strnlen", SizeT, [Ptr, SizeT]>; + +/// char *strpbrk(const char *s1, const char *s2); +def strpbrk : TargetLibCall<"strpbrk", Ptr, [Ptr, Ptr]>; + +/// char *strrchr(const char *s, int c); +def strrchr : TargetLibCall<"strrchr", Ptr, [Ptr, Int]>; + +/// size_t strspn(const char *s1, const char *s2); +def strspn : TargetLibCall<"strspn", SizeT, [Ptr, Ptr]>; + +/// char *strstr(const char *s1, const char *s2); +def strstr : TargetLibCall<"strstr", Ptr, [Ptr, Ptr]>; + +/// double strtod(const char *nptr, char **endptr); +def strtod : TargetLibCall<"strtod", Dbl, [Ptr, Ptr]>; + +/// float strtof(const char *nptr, char **endptr); +def strtof : TargetLibCall<"strtof", Flt, [Ptr, Ptr]>; + +/// char *strtok(char *s1, const char *s2); +def strtok : TargetLibCall<"strtok", Ptr, [Ptr, Ptr]>; + +/// char *strtok_r(char *s, const char *sep, char **lasts); +def strtok_r : TargetLibCall<"strtok_r", Ptr, [Ptr, Ptr, Ptr]>; + +/// long int strtol(const char *nptr, char **endptr, int base); +def strtol : TargetLibCall<"strtol", Long, [Ptr, Ptr, Int]>; + +/// long double strtold(const char *nptr, char **endptr); +def strtold : TargetLibCall<"strtold", LDbl, [Ptr, Ptr]>; + +/// long long int strtoll(const char *nptr, char **endptr, int base); +def strtoll : TargetLibCall<"strtoll", LLong, [Ptr, Ptr, Int]>; + +/// unsigned long int strtoul(const char *nptr, char **endptr, int base); +def strtoul : TargetLibCall<"strtoul", Long, [Ptr, Ptr, Int]>; + +/// unsigned long long int strtoull(const char *nptr, char **endptr, int base); +def strtoull : TargetLibCall<"strtoull", LLong, [Ptr, Ptr, Int]>; + +/// size_t strxfrm(char *s1, const char *s2, size_t n); +def strxfrm : TargetLibCall<"strxfrm", SizeT, [Ptr, Ptr, SizeT]>; + +/// int system(const char *command); +def system : TargetLibCall<"system", Int, [Ptr]>; + +/// double tan(double x); +def tan : TargetLibCall<"tan", Dbl, [Dbl]>; + +/// float tanf(float x); +def tanf : TargetLibCall<"tanf", Flt, [Flt]>; + +/// double tanh(double x); +def tanh : TargetLibCall<"tanh", Dbl, [Dbl]>; + +/// float tanhf(float x); +def tanhf : TargetLibCall<"tanhf", Flt, [Flt]>; + +/// long double tanhl(long double x); +def tanhl : TargetLibCall<"tanhl", LDbl, [LDbl]>; + +/// long double tanl(long double x); +def tanl : TargetLibCall<"tanl", LDbl, [LDbl]>; + +/// clock_t times(struct tms *buffer); +def times : TargetLibCall<"times", IntPlus, [Ptr]>; + +/// FILE *tmpfile(void); +def tmpfile : TargetLibCall<"tmpfile", Ptr, []>; + +/// FILE *tmpfile64(void) +def tmpfile64 : TargetLibCall<"tmpfile64", Ptr, []>; + +/// int toascii(int c); +def toascii : TargetLibCall<"toascii", Int, [Int]>; + +/// double trunc(double x); +def trunc : TargetLibCall<"trunc", Dbl, [Dbl]>; + +/// float truncf(float x); +def truncf : TargetLibCall<"truncf", Flt, [Flt]>; + +/// long double truncl(long double x); +def truncl : TargetLibCall<"truncl", LDbl, [LDbl]>; + +/// int uname(struct utsname *name); +def uname : TargetLibCall<"uname", Int, [Ptr]>; + +/// int ungetc(int c, FILE *stream); +def ungetc : TargetLibCall<"ungetc", Int, [Int, Ptr]>; + +/// int unlink(const char *path); +def unlink : TargetLibCall<"unlink", Int, [Ptr]>; + +/// int unsetenv(const char *name); +def unsetenv : TargetLibCall<"unsetenv", Int, [Ptr]>; + +/// int utime(const char *path, const struct utimbuf *times); +def utime : TargetLibCall<"utime", Int, [Ptr, Ptr]>; + +/// int utimes(const char *path, const struct timeval times[2]); +def utimes : TargetLibCall<"utimes", Int, [Ptr, Ptr]>; + +/// void *valloc(size_t size); +def valloc : TargetLibCall<"valloc", Ptr, [SizeT]>; + +/// void *vec_calloc(size_t count, size_t size); +def vec_calloc : TargetLibCall<"vec_calloc", Ptr, [SizeT, SizeT]>; + +/// void vec_free(void *ptr); +def vec_free : TargetLibCall<"vec_free", Void, [Ptr]>; + +/// void *vec_malloc(size_t size); +def vec_malloc : TargetLibCall<"vec_malloc", Ptr, [SizeT]>; + +/// void *vec_realloc(void *ptr, size_t size); +def vec_realloc : TargetLibCall<"vec_realloc", Ptr, [Ptr, SizeT]>; + +/// int vfprintf(FILE *stream, const char *format, va_list ap); +def vfprintf : TargetLibCall<"vfprintf", Int, [Ptr, Ptr, Ptr]>; + +/// int vfscanf(FILE *stream, const char *format, va_list arg); +def vfscanf : TargetLibCall<"vfscanf", Int, [Ptr, Ptr, Ptr]>; + +/// int vprintf(const char *restrict format, va_list ap); +def vprintf : TargetLibCall<"vprintf", Int, [Ptr, Ptr]>; + +/// int vscanf(const char *format, va_list arg); +def vscanf : TargetLibCall<"vscanf", Int, [Ptr, Ptr]>; + +/// int vsnprintf(char *s, size_t n, const char *format, va_list ap); +def vsnprintf : TargetLibCall<"vsnprintf", Int, [Ptr, SizeT, Ptr, Ptr]>; + +/// int vsprintf(char *s, const char *format, va_list ap); +def vsprintf : TargetLibCall<"vsprintf", Int, [Ptr, Ptr, Ptr]>; + +/// int vsscanf(const char *s, const char *format, va_list arg); +def vsscanf : TargetLibCall<"vsscanf", Int, [Ptr, Ptr, Ptr]>; + +/// size_t wcslen (const wchar_t* wcs); +def wcslen : TargetLibCall<"wcslen", SizeT, [Ptr]>; + +/// ssize_t write(int fildes, const void *buf, size_t nbyte); +def write : TargetLibCall<"write", SSizeT, [Int, Ptr, SizeT]>; diff --git a/llvm/include/llvm/Analysis/TargetLibraryInfoImpl.td b/llvm/include/llvm/Analysis/TargetLibraryInfoImpl.td new file mode 100644 index 0000000000000..cd1a0bb45b5de --- /dev/null +++ b/llvm/include/llvm/Analysis/TargetLibraryInfoImpl.td @@ -0,0 +1,44 @@ +//===-- TargetLibraryInfoImpl.td - File that describes library functions --===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// Return type or argument type of library function. +class FuncArgType { + string Name = NAME; +} + +// Recognized types of library function arguments and return types. +def Void : FuncArgType; +def Bool : FuncArgType; // 8 bits on all targets +def Int16 : FuncArgType; +def Int32 : FuncArgType; +def Int : FuncArgType; +def IntPlus : FuncArgType; // Int or bigger. +def Long : FuncArgType; // Either 32 or 64 bits. +def IntX : FuncArgType; // Any integer type. +def Int64 : FuncArgType; +def LLong : FuncArgType; // 64 bits on all targets. +def SizeT : FuncArgType; // size_t. +def SSizeT : FuncArgType; // POSIX ssize_t. +def Flt : FuncArgType; // IEEE float. +def Dbl : FuncArgType; // IEEE double. +def LDbl : FuncArgType; // Any floating type (TODO: tighten this up). +def Floating : FuncArgType; // Any floating type. +def Ptr : FuncArgType; // Any pointer type. +def Struct : FuncArgType; // Any struct type. +def Ellip : FuncArgType; // The ellipsis (...). +def Same : FuncArgType; // Same argument type as the previous one. + + +// Definition of library function. +class TargetLibCall ArgTypes = []> { + string Name = NAME; + string String = Str; + FuncArgType ReturnType = RetType; + list ArgumentTypes = ArgTypes; +} diff --git a/llvm/include/llvm/CMakeLists.txt b/llvm/include/llvm/CMakeLists.txt index ac6b96a68ab92..81da4f6cb9a90 100644 --- a/llvm/include/llvm/CMakeLists.txt +++ b/llvm/include/llvm/CMakeLists.txt @@ -2,6 +2,7 @@ # LLVM_HEADERS_TABLEGEN points to `llvm-min-tblgen` set(LLVM_TABLEGEN_PROJECT LLVM_HEADERS) +add_subdirectory(Analysis) add_subdirectory(CodeGen) add_subdirectory(IR) add_subdirectory(Support) diff --git a/llvm/include/llvm/TableGen/StringToOffsetTable.h b/llvm/include/llvm/TableGen/StringToOffsetTable.h index 154ded8e94d7f..5ee5fb538f3eb 100644 --- a/llvm/include/llvm/TableGen/StringToOffsetTable.h +++ b/llvm/include/llvm/TableGen/StringToOffsetTable.h @@ -28,10 +28,13 @@ class StringToOffsetTable { /// plus ::) const StringRef ClassPrefix; const bool AppendZero; + const bool UsePrefixForStorageMember; public: - StringToOffsetTable(bool AppendZero = true, StringRef ClassPrefix = "") - : ClassPrefix(ClassPrefix), AppendZero(AppendZero) { + StringToOffsetTable(bool AppendZero = true, StringRef ClassPrefix = "", + bool UsePrefixForStorageMember = true) + : ClassPrefix(ClassPrefix), AppendZero(AppendZero), + UsePrefixForStorageMember(UsePrefixForStorageMember) { // Ensure we always put the empty string at offset zero. That lets empty // initialization also be zero initialization for offsets into the table. GetOrAddStringOffset(""); diff --git a/llvm/lib/Analysis/BranchProbabilityInfo.cpp b/llvm/lib/Analysis/BranchProbabilityInfo.cpp index 671e023415a6e..4a99a40e0d2cc 100644 --- a/llvm/lib/Analysis/BranchProbabilityInfo.cpp +++ b/llvm/lib/Analysis/BranchProbabilityInfo.cpp @@ -987,7 +987,7 @@ bool BranchProbabilityInfo::calcZeroHeuristics(const BasicBlock *BB, return false; // Check if the LHS is the return value of a library function - LibFunc Func = NumLibFuncs; + LibFunc Func = LibFunc::NotLibFunc; if (TLI) if (CallInst *Call = dyn_cast(CI->getOperand(0))) if (Function *CalledFn = Call->getCalledFunction()) diff --git a/llvm/lib/Analysis/CMakeLists.txt b/llvm/lib/Analysis/CMakeLists.txt index bff9b62d98e06..9abdca099d9fe 100644 --- a/llvm/lib/Analysis/CMakeLists.txt +++ b/llvm/lib/Analysis/CMakeLists.txt @@ -166,6 +166,7 @@ add_llvm_component_library(LLVMAnalysis ${LLVM_MAIN_INCLUDE_DIR}/llvm/Analysis DEPENDS + analysis_gen intrinsics_gen ${MLDeps} diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp index 26d0c108fb03a..51b1f5874bcb6 100644 --- a/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -13,6 +13,7 @@ #include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallString.h" +#include "llvm/ADT/StringTable.h" #include "llvm/IR/Constants.h" #include "llvm/IR/Module.h" #include "llvm/IR/SystemLibraries.h" @@ -20,11 +21,8 @@ #include "llvm/TargetParser/Triple.h" using namespace llvm; -StringLiteral const TargetLibraryInfoImpl::StandardNames[LibFunc::NumLibFuncs] = - { -#define TLI_DEFINE_STRING -#include "llvm/Analysis/TargetLibraryInfo.def" -}; +#define GET_TARGET_LIBRARY_INFO_STRING_TABLE +#include "llvm/Analysis/TargetLibraryInfo.inc" std::string VecDesc::getVectorFunctionABIVariantString() const { assert(!VectorFnName.empty() && "Vector function name must not be empty."); @@ -34,39 +32,8 @@ std::string VecDesc::getVectorFunctionABIVariantString() const { return std::string(Out.str()); } -// Recognized types of library function arguments and return types. -enum FuncArgTypeID : char { - Void = 0, // Must be zero. - Bool, // 8 bits on all targets - Int16, - Int32, - Int, - IntPlus, // Int or bigger. - Long, // Either 32 or 64 bits. - IntX, // Any integer type. - Int64, - LLong, // 64 bits on all targets. - SizeT, // size_t. - SSizeT, // POSIX ssize_t. - Flt, // IEEE float. - Dbl, // IEEE double. - LDbl, // Any floating type (TODO: tighten this up). - Floating, // Any floating type. - Ptr, // Any pointer type. - Struct, // Any struct type. - Ellip, // The ellipsis (...). - Same, // Same argument type as the previous one. -}; - -typedef std::array FuncProtoTy; - -static const FuncProtoTy Signatures[] = { -#define TLI_DEFINE_SIG -#include "llvm/Analysis/TargetLibraryInfo.def" -}; - -static_assert(sizeof Signatures / sizeof *Signatures == LibFunc::NumLibFuncs, - "Missing library function signatures"); +#define GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE +#include "llvm/Analysis/TargetLibraryInfo.inc" static bool hasSinCosPiStret(const Triple &T) { // Only Darwin variants have _stret versions of combined trig functions. @@ -160,7 +127,7 @@ static void initializeBase(TargetLibraryInfoImpl &TLI, const Triple &T) { /// target triple. This should be carefully written so that a missing target /// triple gets a sane set of defaults. static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T, - ArrayRef StandardNames, + const llvm::StringTable &StandardNames, VectorLibrary VecLib) { // Set IO unlocked variants as unavailable // Set them as available per system below @@ -932,7 +899,7 @@ static void initializeLibCalls(TargetLibraryInfoImpl &TLI, const Triple &T, /// target triple. This should be carefully written so that a missing target /// triple gets a sane set of defaults. static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, - ArrayRef StandardNames, + const llvm::StringTable &StandardNames, VectorLibrary VecLib) { initializeBase(TLI, T); initializeLibCalls(TLI, T, StandardNames, VecLib); @@ -943,7 +910,7 @@ TargetLibraryInfoImpl::TargetLibraryInfoImpl(const Triple &T, // Default to everything being available. memset(AvailableArray, -1, sizeof(AvailableArray)); - initialize(*this, T, StandardNames, VecLib); + initialize(*this, T, StandardNamesStrTable, VecLib); } TargetLibraryInfoImpl::TargetLibraryInfoImpl(const TargetLibraryInfoImpl &TLI) @@ -1005,7 +972,7 @@ static StringRef sanitizeFunctionName(StringRef funcName) { } static DenseMap -buildIndexMap(ArrayRef StandardNames) { +buildIndexMap(const llvm::StringTable &StandardNames) { DenseMap Indices; unsigned Idx = 0; Indices.reserve(LibFunc::NumLibFuncs); @@ -1020,7 +987,7 @@ bool TargetLibraryInfoImpl::getLibFunc(StringRef funcName, LibFunc &F) const { return false; static const DenseMap Indices = - buildIndexMap(StandardNames); + buildIndexMap(StandardNamesStrTable); if (auto Loc = Indices.find(funcName); Loc != Indices.end()) { F = Loc->second; @@ -1190,18 +1157,18 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, // against the function's type FTy, starting with its return type. // Return true if both match in number and kind, inclduing the ellipsis. Type *Ty = FTy.getReturnType(), *LastTy = Ty; - const auto &ProtoTypes = Signatures[F]; - for (auto TyID : ProtoTypes) { - if (Idx && TyID == Void) - // Except in the first position where it designates the function's - // return type Void ends the argument list. + const auto *ProtoTypes = &SignatureTable[SignatureOffset[F]]; + for (auto TyID = ProtoTypes[Idx]; TyID != NoFuncArgType; + TyID = ProtoTypes[++Idx]) { + if (TyID == NoFuncArgType) break; if (TyID == Ellip) { // The ellipsis ends the protoype list but is not a part of FTy's // argument list. Except when it's last it must be followed by - // Void. - assert(Idx == ProtoTypes.size() - 1 || ProtoTypes[Idx + 1] == Void); + // NoFuncArgType. + assert(ProtoTypes[Idx] == NoFuncArgType || + ProtoTypes[Idx + 1] == NoFuncArgType); return FTy.isFunctionVarArg(); } @@ -1219,11 +1186,10 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, // There's at least one and at most two more type ids than there are // arguments in FTy's argument list. Ty = nullptr; - ++Idx; continue; } - Ty = FTy.getParamType(Idx++); + Ty = FTy.getParamType(Idx); } // Return success only if all entries on both lists have been processed diff --git a/llvm/lib/LTO/UpdateCompilerUsed.cpp b/llvm/lib/LTO/UpdateCompilerUsed.cpp index c95aaaf30bf80..1889c2b762ff7 100644 --- a/llvm/lib/LTO/UpdateCompilerUsed.cpp +++ b/llvm/lib/LTO/UpdateCompilerUsed.cpp @@ -62,8 +62,8 @@ class PreserveLibCallsAndAsmUsed { // TargetLibraryInfo has info on C runtime library calls on the current // target. - for (unsigned I = 0, E = static_cast(LibFunc::NumLibFuncs); - I != E; ++I) { + for (unsigned I = LibFunc::Begin_LibFunc, E = LibFunc::End_LibFunc; I != E; + ++I) { LibFunc F = static_cast(I); if (TLI.has(F)) Libcalls.insert(TLI.getName(F)); diff --git a/llvm/lib/TableGen/StringToOffsetTable.cpp b/llvm/lib/TableGen/StringToOffsetTable.cpp index 41f82caa12f82..06d8240486245 100644 --- a/llvm/lib/TableGen/StringToOffsetTable.cpp +++ b/llvm/lib/TableGen/StringToOffsetTable.cpp @@ -39,7 +39,8 @@ void StringToOffsetTable::EmitStringTableDef(raw_ostream &OS, #pragma GCC diagnostic ignored "-Woverlength-strings" #endif {} constexpr char {}{}Storage[] =)", - ClassPrefix.empty() ? "static" : "", ClassPrefix, Name); + ClassPrefix.empty() ? "static" : "", + UsePrefixForStorageMember ? ClassPrefix : "", Name); // MSVC silently miscompiles string literals longer than 64k in some // circumstances. The build system sets EmitLongStrLiterals to false when it diff --git a/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp index a2fad021e0480..66d570b3f831e 100644 --- a/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/NumericalStabilitySanitizer.cpp @@ -811,7 +811,7 @@ static bool shouldCheckArgs(CallBase &CI, const TargetLibraryInfo &TLI, return false; const auto ID = Fn->getIntrinsicID(); - LibFunc LFunc = LibFunc::NumLibFuncs; + LibFunc LFunc = LibFunc::NotLibFunc; // Always check args of unknown functions. if (ID == Intrinsic::ID() && !TLI.getLibFunc(*Fn, LFunc)) return true; diff --git a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp index 4a1565977b91c..4f4e64b1c7b70 100644 --- a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp @@ -2921,7 +2921,7 @@ Value *LibCallSimplifier::optimizeTrigInversionPairs(CallInst *CI, .Case("asinh", LibFunc_sinh) .Case("asinhf", LibFunc_sinhf) .Case("asinhl", LibFunc_sinhl) - .Default(NumLibFuncs); // Used as error value + .Default(NotLibFunc); // Used as error value if (Func == inverseFunc) Ret = OpC->getArgOperand(0); } diff --git a/llvm/test/TableGen/TargetLibraryInfo.td b/llvm/test/TableGen/TargetLibraryInfo.td new file mode 100644 index 0000000000000..ca6d16e236bda --- /dev/null +++ b/llvm/test/TableGen/TargetLibraryInfo.td @@ -0,0 +1,115 @@ +// RUN: llvm-tblgen -gen-target-library-info -I %p/../../include %s | FileCheck %s + +include "llvm/Analysis/TargetLibraryInfoImpl.td" + +def cosf : TargetLibCall< "cosf", Flt, [Flt]>; +def sinf : TargetLibCall< "sinf", Flt, [Flt]>; + +def fmaxf : TargetLibCall< "fmaxf", Floating, [Same, Same]>; + +def printf : TargetLibCall< "printf", Int, [Ptr, Ellip]>; + +def cabs : TargetLibCall< "cabs", ? /* Checked manually. */>; + +// CHECK: #ifdef GET_TARGET_LIBRARY_INFO_ENUM +// CHECK-NEXT: #undef GET_TARGET_LIBRARY_INFO_ENUM +// CHECK-NEXT: enum LibFunc : unsigned { +// CHECK-NEXT: NotLibFunc = 0, +// CHECK-NEXT: LibFunc_cosf, +// CHECK-NEXT: LibFunc_sinf, +// CHECK-NEXT: LibFunc_fmaxf, +// CHECK-NEXT: LibFunc_printf, +// CHECK-NEXT: LibFunc_cabs, +// CHECK-NEXT: NumLibFuncs, +// CHECK-NEXT: End_LibFunc = NumLibFuncs, +// CHECK-NEXT: Begin_LibFunc = LibFunc_cosf, +// CHECK-NEXT: }; +// CHECK-NEXT: #endif + +// CHECK: #ifdef GET_TARGET_LIBRARY_INFO_STRING_TABLE +// CHECK-NEXT: #undef GET_TARGET_LIBRARY_INFO_STRING_TABLE + +// CHECK: #ifdef __GNUC__ +// CHECK-NEXT: #pragma GCC diagnostic push +// CHECK-NEXT: #pragma GCC diagnostic ignored "-Woverlength-strings" +// CHECK-NEXT: #endif +// CHECK-NEXT: constexpr char StandardNamesStrTableStorage[] = +// CHECK-NEXT: "\0" +// CHECK-NEXT: "cosf\0" +// CHECK-NEXT: "sinf\0" +// CHECK-NEXT: "fmaxf\0" +// CHECK-NEXT: "printf\0" +// CHECK-NEXT: "cabs\0" +// CHECK-NEXT: ; +// CHECK-NEXT: #ifdef __GNUC__ +// CHECK-NEXT: #pragma GCC diagnostic pop +// CHECK-NEXT: #endif + +// CHECK: const llvm::StringTable +// CHECK-NEXT: TargetLibraryInfoImpl::StandardNamesStrTable = StandardNamesStrTableStorage; + +// CHECK: const llvm::StringTable::Offset TargetLibraryInfoImpl::StandardNamesOffsets[6] = { +// CHECK-NEXT: 0, // +// CHECK-NEXT: 1, // cosf +// CHECK-NEXT: 6, // sinf +// CHECK-NEXT: 11, // fmaxf +// CHECK-NEXT: 17, // printf +// CHECK-NEXT: 24, // cabs +// CHECK-NEXT: }; +// CHECK-NEXT: const uint8_t TargetLibraryInfoImpl::StandardNamesSizeTable[6] = { +// CHECK-NEXT: 0, +// CHECK-NEXT: 4, +// CHECK-NEXT: 4, +// CHECK-NEXT: 5, +// CHECK-NEXT: 6, +// CHECK-NEXT: 4, +// CHECK-NEXT: }; +// CHECK-NEXT: #endif + +// CHECK: #ifdef GET_TARGET_LIBRARY_INFO_IMPL_DECL +// CHECK-NEXT: #undef GET_TARGET_LIBRARY_INFO_IMPL_DECL +// CHECK-NEXT: LLVM_ABI static const llvm::StringTable StandardNamesStrTable; +// CHECK-NEXT: LLVM_ABI static const llvm::StringTable::Offset StandardNamesOffsets[6]; +// CHECK-NEXT: LLVM_ABI static const uint8_t StandardNamesSizeTable[6]; +// CHECK-NEXT: #endif + +// CHECK: #ifdef GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE +// CHECK-NEXT: #undef GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE +// CHECK-NEXT: enum FuncArgTypeID : char { +// CHECK-NEXT: NoFuncArgType = 0, +// CHECK-NEXT: Void, +// CHECK-NEXT: Bool, +// CHECK-NEXT: Int16, +// CHECK-NEXT: Int32, +// CHECK-NEXT: Int, +// CHECK-NEXT: IntPlus, +// CHECK-NEXT: Long, +// CHECK-NEXT: IntX, +// CHECK-NEXT: Int64, +// CHECK-NEXT: LLong, +// CHECK-NEXT: SizeT, +// CHECK-NEXT: SSizeT, +// CHECK-NEXT: Flt, +// CHECK-NEXT: Dbl, +// CHECK-NEXT: LDbl, +// CHECK-NEXT: Floating, +// CHECK-NEXT: Ptr, +// CHECK-NEXT: Struct, +// CHECK-NEXT: Ellip, +// CHECK-NEXT: Same, +// CHECK-NEXT: }; +// CHECK-NEXT: static const FuncArgTypeID SignatureTable[] = { +// CHECK-NEXT: /* 0 */ Int, Ptr, Ellip, NoFuncArgType, +// CHECK-NEXT: /* 4 */ Flt, Flt, NoFuncArgType, +// CHECK-NEXT: /* 7 */ Floating, Same, Same, NoFuncArgType, +// CHECK-NEXT: /* 11 */ Void, NoFuncArgType, +// CHECK-NEXT: }; +// CHECK-NEXT: static const uint16_t SignatureOffset[] = { +// CHECK-NEXT: 11, // +// CHECK-NEXT: 4, // cosf +// CHECK-NEXT: 4, // sinf +// CHECK-NEXT: 7, // fmaxf +// CHECK-NEXT: 0, // printf +// CHECK-NEXT: 3, // cabs +// CHECK-NEXT: }; +// CHECK-NEXT: #endif diff --git a/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp b/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp index 0cf8c5c63bef2..0b606afb44cb9 100644 --- a/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp +++ b/llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp @@ -113,19 +113,20 @@ static void reportNumberOfEntries(const TargetLibraryInfo &TLI, // Assume this gets called after initialize(), so we have the above line of // output as a header. So, for example, no need to repeat the triple. - for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) { + for (unsigned FI = LibFunc::Begin_LibFunc; FI != LibFunc::End_LibFunc; ++FI) { if (TLI.has(static_cast(FI))) ++NumAvailable; } - outs() << "TLI knows " << LibFunc::NumLibFuncs << " symbols, " << NumAvailable - << " available for '" << TargetTriple << "'\n"; + outs() << "TLI knows " << (LibFunc::End_LibFunc - LibFunc::Begin_LibFunc) + << " symbols, " << NumAvailable << " available for '" << TargetTriple + << "'\n"; } static void dumpTLIEntries(const TargetLibraryInfo &TLI) { // Assume this gets called after initialize(), so we have the above line of // output as a header. So, for example, no need to repeat the triple. - for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) { + for (unsigned FI = LibFunc::Begin_LibFunc; FI != LibFunc::End_LibFunc; ++FI) { LibFunc LF = static_cast(FI); bool IsAvailable = TLI.has(LF); StringRef FuncName = TargetLibraryInfo::getStandardName(LF); @@ -316,7 +317,8 @@ int main(int argc, char *argv[]) { unsigned TLIandSDKboth = 0; unsigned TLIandSDKneither = 0; - for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) { + for (unsigned FI = LibFunc::Begin_LibFunc; FI != LibFunc::End_LibFunc; + ++FI) { LibFunc LF = static_cast(FI); StringRef TLIName = TLI.getStandardName(LF); @@ -344,7 +346,7 @@ int main(int argc, char *argv[]) { assert(TLIandSDKboth + TLIandSDKneither + TLIdoesSDKdoesnt + TLIdoesntSDKdoes == - LibFunc::NumLibFuncs); + LibFunc::End_LibFunc - LibFunc::Begin_LibFunc); (void) TLIandSDKneither; outs() << "<< Total TLI yes SDK no: " << TLIdoesSDKdoesnt << "\n>> Total TLI no SDK yes: " << TLIdoesntSDKdoes diff --git a/llvm/unittests/Analysis/TargetLibraryInfoTest.cpp b/llvm/unittests/Analysis/TargetLibraryInfoTest.cpp index 787a32407ad95..3029f10b1bb29 100644 --- a/llvm/unittests/Analysis/TargetLibraryInfoTest.cpp +++ b/llvm/unittests/Analysis/TargetLibraryInfoTest.cpp @@ -64,7 +64,7 @@ TEST_F(TargetLibraryInfoTest, InvalidProto) { auto *StructTy = StructType::getTypeByName(Context, "foo"); auto *InvalidFTy = FunctionType::get(StructTy, /*isVarArg=*/false); - for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) { + for (unsigned FI = LibFunc::Begin_LibFunc; FI != LibFunc::End_LibFunc; ++FI) { LibFunc LF = (LibFunc)FI; auto *F = cast( M->getOrInsertFunction(TLI.getName(LF), InvalidFTy).getCallee()); @@ -694,7 +694,7 @@ TEST_F(TargetLibraryInfoTest, ValidProto) { "declare i8* @__kmpc_alloc_shared(i64)\n" "declare void @__kmpc_free_shared(i8*, i64)\n"); - for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) { + for (unsigned FI = LibFunc::Begin_LibFunc; FI != LibFunc::End_LibFunc; ++FI) { LibFunc LF = (LibFunc)FI; // Make sure everything is available; we're not testing target defaults. TLII.setAvailable(LF); diff --git a/llvm/utils/TableGen/Basic/CMakeLists.txt b/llvm/utils/TableGen/Basic/CMakeLists.txt index 2030e9add7f30..01ab8a0ef2250 100644 --- a/llvm/utils/TableGen/Basic/CMakeLists.txt +++ b/llvm/utils/TableGen/Basic/CMakeLists.txt @@ -20,6 +20,7 @@ add_llvm_library(LLVMTableGenBasic OBJECT EXCLUDE_FROM_ALL DISABLE_LLVM_LINK_LLV SDNodeProperties.cpp TableGen.cpp TargetFeaturesEmitter.cpp + TargetLibraryInfoEmitter.cpp VTEmitter.cpp ) diff --git a/llvm/utils/TableGen/Basic/TargetLibraryInfoEmitter.cpp b/llvm/utils/TableGen/Basic/TargetLibraryInfoEmitter.cpp new file mode 100644 index 0000000000000..f7364e0298d89 --- /dev/null +++ b/llvm/utils/TableGen/Basic/TargetLibraryInfoEmitter.cpp @@ -0,0 +1,186 @@ +//===- TargetLibraryInfoEmitter.cpp - Properties from TargetLibraryInfo.td ===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "SequenceToOffsetTable.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/raw_ostream.h" +#include "llvm/TableGen/Error.h" +#include "llvm/TableGen/Record.h" +#include "llvm/TableGen/SetTheory.h" +#include "llvm/TableGen/StringToOffsetTable.h" +#include "llvm/TableGen/TableGenBackend.h" +#include + +#define DEBUG_TYPE "target-library-info-emitter" + +using namespace llvm; + +namespace { +class TargetLibraryInfoEmitter { +private: + const RecordKeeper &Records; + SmallVector AllTargetLibcalls; + +private: + void emitTargetLibraryInfoEnum(raw_ostream &OS) const; + void emitTargetLibraryInfoStringTable(raw_ostream &OS) const; + void emitTargetLibraryInfoSignatureTable(raw_ostream &OS) const; + +public: + TargetLibraryInfoEmitter(const RecordKeeper &R); + + void run(raw_ostream &OS); +}; + +} // End anonymous namespace. + +TargetLibraryInfoEmitter::TargetLibraryInfoEmitter(const RecordKeeper &R) + : Records(R) { + ArrayRef All = + Records.getAllDerivedDefinitions("TargetLibCall"); + AllTargetLibcalls.append(All.begin(), All.end()); + // Make sure that the records are in the same order as the input. + // TODO Find a better sorting order when all is migrated. + sort(AllTargetLibcalls, [](const Record *A, const Record *B) { + return A->getID() < B->getID(); + }); +} + +// Emits the LibFunc enumeration, which is an abstract name for each library +// function. +void TargetLibraryInfoEmitter::emitTargetLibraryInfoEnum( + raw_ostream &OS) const { + OS << "#ifdef GET_TARGET_LIBRARY_INFO_ENUM\n"; + OS << "#undef GET_TARGET_LIBRARY_INFO_ENUM\n"; + OS << "enum LibFunc : unsigned {\n"; + OS.indent(2) << "NotLibFunc = 0,\n"; + for (const auto *R : AllTargetLibcalls) { + OS.indent(2) << "LibFunc_" << R->getName() << ",\n"; + } + OS.indent(2) << "NumLibFuncs,\n"; + OS.indent(2) << "End_LibFunc = NumLibFuncs,\n"; + if (AllTargetLibcalls.size()) { + OS.indent(2) << "Begin_LibFunc = LibFunc_" + << AllTargetLibcalls[0]->getName() << ",\n"; + } else { + OS.indent(2) << "Begin_LibFunc = NotLibFunc,\n"; + } + OS << "};\n"; + OS << "#endif\n\n"; +} + +// The names of the functions are stored in a long string, along with support +// tables for accessing the offsets of the function names from the beginning of +// the string. +void TargetLibraryInfoEmitter::emitTargetLibraryInfoStringTable( + raw_ostream &OS) const { + llvm::StringToOffsetTable Table( + /*AppendZero=*/true, + "TargetLibraryInfoImpl::", /*UsePrefixForStorageMember=*/false); + for (const auto *R : AllTargetLibcalls) + Table.GetOrAddStringOffset(R->getValueAsString("String")); + + OS << "#ifdef GET_TARGET_LIBRARY_INFO_STRING_TABLE\n"; + OS << "#undef GET_TARGET_LIBRARY_INFO_STRING_TABLE\n"; + Table.EmitStringTableDef(OS, "StandardNamesStrTable"); + OS << "\n"; + size_t NumEl = AllTargetLibcalls.size() + 1; + OS << "const llvm::StringTable::Offset " + "TargetLibraryInfoImpl::StandardNamesOffsets[" + << NumEl + << "] = " + "{\n"; + OS.indent(2) << "0, //\n"; + for (const auto *R : AllTargetLibcalls) { + StringRef Str = R->getValueAsString("String"); + OS.indent(2) << Table.GetStringOffset(Str) << ", // " << Str << "\n"; + } + OS << "};\n"; + OS << "const uint8_t TargetLibraryInfoImpl::StandardNamesSizeTable[" << NumEl + << "] = {\n"; + OS << " 0,\n"; + for (const auto *R : AllTargetLibcalls) + OS.indent(2) << R->getValueAsString("String").size() << ",\n"; + OS << "};\n"; + OS << "#endif\n\n"; + OS << "#ifdef GET_TARGET_LIBRARY_INFO_IMPL_DECL\n"; + OS << "#undef GET_TARGET_LIBRARY_INFO_IMPL_DECL\n"; + OS << "LLVM_ABI static const llvm::StringTable StandardNamesStrTable;\n"; + OS << "LLVM_ABI static const llvm::StringTable::Offset StandardNamesOffsets[" + << NumEl << "];\n"; + OS << "LLVM_ABI static const uint8_t StandardNamesSizeTable[" << NumEl + << "];\n"; + OS << "#endif\n\n"; +} + +// Since there are much less type signatures then library functions, the type +// signatures are stored reusing existing entries. To access a table entry, an +// offset table is used. +void TargetLibraryInfoEmitter::emitTargetLibraryInfoSignatureTable( + raw_ostream &OS) const { + SmallVector FuncTypeArgs( + Records.getAllDerivedDefinitions("FuncArgType")); + + // Sort the records by ID. + sort(FuncTypeArgs, [](const Record *A, const Record *B) { + return A->getID() < B->getID(); + }); + + using Signature = std::vector; + SequenceToOffsetTable SignatureTable("NoFuncArgType"); + auto GetSignature = [](const Record *R) -> Signature { + const auto *Tys = R->getValueAsListInit("ArgumentTypes"); + Signature Sig; + Sig.reserve(Tys->size() + 1); + const Record *RetType = R->getValueAsOptionalDef("ReturnType"); + if (RetType) + Sig.push_back(RetType->getName()); + for (unsigned I = 0, E = Tys->size(); I < E; ++I) { + Sig.push_back(Tys->getElementAsRecord(I)->getName()); + } + return Sig; + }; + DenseMap SignatureMap; + Signature NoFuncSig({StringRef("Void")}); + SignatureTable.add(NoFuncSig); + for (const auto *R : AllTargetLibcalls) + SignatureTable.add(GetSignature(R)); + SignatureTable.layout(); + + OS << "#ifdef GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE\n"; + OS << "#undef GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE\n"; + OS << "enum FuncArgTypeID : char {\n"; + OS.indent(2) << "NoFuncArgType = 0,\n"; + for (const auto *R : FuncTypeArgs) { + OS.indent(2) << R->getName() << ",\n"; + } + OS << "};\n"; + OS << "static const FuncArgTypeID SignatureTable[] = {\n"; + SignatureTable.emit(OS, [](raw_ostream &OS, StringRef E) { OS << E; }); + OS << "};\n"; + OS << "static const uint16_t SignatureOffset[] = {\n"; + OS.indent(2) << SignatureTable.get(NoFuncSig) << ", //\n"; + for (const auto *R : AllTargetLibcalls) { + OS.indent(2) << SignatureTable.get(GetSignature(R)) << ", // " + << R->getName() << "\n"; + } + OS << "};\n"; + OS << "#endif\n\n"; +} + +void TargetLibraryInfoEmitter::run(raw_ostream &OS) { + emitSourceFileHeader("Target Library Info Source Fragment", OS, Records); + + emitTargetLibraryInfoEnum(OS); + emitTargetLibraryInfoStringTable(OS); + emitTargetLibraryInfoSignatureTable(OS); +} + +static TableGen::Emitter::OptClass + X("gen-target-library-info", "Generate TargetLibraryInfo"); From 2b16ae0d42ebc5b9c42a9d14c8a40bef4c9a6683 Mon Sep 17 00:00:00 2001 From: Sam Elliott Date: Wed, 19 Nov 2025 21:20:37 +0000 Subject: [PATCH 26/48] [RISCV] Fix CFI Multiple Locations Test (#168772) --- llvm/test/CodeGen/RISCV/cfi-multiple-locations.mir | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/test/CodeGen/RISCV/cfi-multiple-locations.mir b/llvm/test/CodeGen/RISCV/cfi-multiple-locations.mir index 08544a95dedb7..d2e5a8208cecf 100644 --- a/llvm/test/CodeGen/RISCV/cfi-multiple-locations.mir +++ b/llvm/test/CodeGen/RISCV/cfi-multiple-locations.mir @@ -1,4 +1,4 @@ -# RUN: llc %s -mtriple=riscv64 \ +# RUN: llc -x mir < %s -mtriple=riscv64 \ # RUN: -run-pass=cfi-instr-inserter \ # RUN: -riscv-enable-cfi-instr-inserter=true # UNSUPPORTED: target={{.*}} From 609c88a1fd8bdfd67f86a1c129325e2ccd6b959c Mon Sep 17 00:00:00 2001 From: Marco Elver Date: Wed, 19 Nov 2025 22:25:35 +0100 Subject: [PATCH 27/48] [Clang][Sema] Fix __builtin_infer_alloc_token() return type (#168773) Using the builtin failed on 32-bit architectures: ``` clang/lib/AST/ExprConstant.cpp:14299: [..]: Assertion `I.getBitWidth() == Info.Ctx.getIntWidth(E->getType()) && "Invalid evaluation result."' failed. ``` The return type is meant to be size_t. Fix it. --- clang/lib/Sema/SemaChecking.cpp | 2 +- clang/test/SemaCXX/alloc-token.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index cf407f7279c46..3e1edc4548034 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -1512,7 +1512,7 @@ static bool checkBuiltinInferAllocToken(Sema &S, CallExpr *TheCall) { return S.Diag(Arg->getBeginLoc(), diag::err_param_with_void_type); } - TheCall->setType(S.Context.UnsignedLongLongTy); + TheCall->setType(S.Context.getSizeType()); return false; } diff --git a/clang/test/SemaCXX/alloc-token.cpp b/clang/test/SemaCXX/alloc-token.cpp index 518ad7d94eb96..2a11e3366d5fb 100644 --- a/clang/test/SemaCXX/alloc-token.cpp +++ b/clang/test/SemaCXX/alloc-token.cpp @@ -3,6 +3,8 @@ // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++23 -fsyntax-only -verify %s -fexperimental-new-constant-interpreter // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++23 -fsyntax-only -verify %s -falloc-token-mode=typehash -DMODE_TYPEHASH // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++23 -fsyntax-only -verify %s -falloc-token-max=2 -DTOKEN_MAX=2 +// RUN: %clang_cc1 -triple arm-linux-androideabi -std=c++23 -fsyntax-only -verify %s -falloc-token-max=2 -DTOKEN_MAX=2 +// RUN: %clang_cc1 -triple arm-linux-androideabi -std=c++23 -fsyntax-only -verify %s -falloc-token-max=2 -DTOKEN_MAX=2 -fexperimental-new-constant-interpreter #if !__has_builtin(__builtin_infer_alloc_token) #error "missing __builtin_infer_alloc_token" From e0c265d1c0cb8650cbfcffa81c297f2cdacc85d9 Mon Sep 17 00:00:00 2001 From: Erick Velez Date: Wed, 19 Nov 2025 13:30:14 -0800 Subject: [PATCH 28/48] [clang-doc] Fix whitespace issues in Mustache basic test (#168491) I found that the issues we've been seeing in the HTML whitespace/alignment are due to partials inserting their own whitespace and calling partials on indented lines or lines containing text already. This patch gets rid of unnecessary whitespace in the comment and function partials so that they are properly indented when inserted. --- .../clang-doc/assets/class-template.mustache | 2 +- .../assets/comment-template.mustache | 89 +- .../assets/function-template.mustache | 6 +- .../clang-doc/basic-project.mustache.test | 811 ++++++++---------- 4 files changed, 402 insertions(+), 506 deletions(-) diff --git a/clang-tools-extra/clang-doc/assets/class-template.mustache b/clang-tools-extra/clang-doc/assets/class-template.mustache index a320a938a91ff..8eb28f33e65f6 100644 --- a/clang-tools-extra/clang-doc/assets/class-template.mustache +++ b/clang-tools-extra/clang-doc/assets/class-template.mustache @@ -174,7 +174,7 @@

Public Methods

{{#PublicFunctions}} -{{>FunctionPartial}} + {{>FunctionPartial}} {{/PublicFunctions}}
diff --git a/clang-tools-extra/clang-doc/assets/comment-template.mustache b/clang-tools-extra/clang-doc/assets/comment-template.mustache index d374c715296d0..1f40333cfd4b2 100644 --- a/clang-tools-extra/clang-doc/assets/comment-template.mustache +++ b/clang-tools-extra/clang-doc/assets/comment-template.mustache @@ -6,61 +6,61 @@ This file defines templates for generating comments }} {{#BriefComments}} -
- {{#.}} -

{{TextComment}}

- {{/.}} -
+
+{{#.}} +

{{TextComment}}

+{{/.}} +
{{/BriefComments}} {{#ParagraphComments}} -
- {{#.}} -

{{TextComment}}

- {{/.}} -
+
+{{#.}} +

{{TextComment}}

+{{/.}} +
{{/ParagraphComments}} {{#ParagraphComment}} - {{#Children}} - {{>Comments}} - {{/Children}} +{{#Children}} +{{TextComment}} +{{/Children}} {{/ParagraphComment}} {{#HasParamComments}} -

Parameters

- {{#ParamComments}} -
- {{ParamName}} {{#Explicit}}{{Direction}}{{/Explicit}} {{#Children}}{{>Comments}}{{/Children}} -
- {{/ParamComments}} +

Parameters

+{{#ParamComments}} +
+ {{ParamName}} {{#Explicit}}{{Direction}}{{/Explicit}} {{#Children}}{{TextComment}}{{/Children}} +
+{{/ParamComments}} {{/HasParamComments}} {{#HasReturnComments}} -

Returns

- {{#ReturnComments}} - {{#.}} -

{{TextComment}}

- {{/.}} - {{/ReturnComments}} +

Returns

+{{#ReturnComments}} +{{#.}} +

{{TextComment}}

+{{/.}} +{{/ReturnComments}} {{/HasReturnComments}} {{#HasCodeComments}} -

Code

- {{#CodeComments}} -
-
-            
-            {{#.}}
+

Code

+{{#CodeComments}} +
+
+        
+        {{#.}}
             {{.}}
-            {{/.}}
-            
-        
-
- {{/CodeComments}} + {{/.}} +
+
+
+{{/CodeComments}} {{/HasCodeComments}} {{#HasThrowsComments}} -

Throws

- {{#ThrowsComments}} -
- {{Exception}} {{#Children}}{{TextComment}}{{/Children}} -
- {{/ThrowsComments}} +

Throws

+{{#ThrowsComments}} +
+ {{Exception}} {{#Children}}{{TextComment}}{{/Children}} +
+{{/ThrowsComments}} {{/HasThrowsComments}} {{#BlockCommandComment}}
@@ -74,8 +74,3 @@
{{/BlockCommandComment}} -{{#TextComment}} -
-

{{TextComment}}

-
-{{/TextComment}} diff --git a/clang-tools-extra/clang-doc/assets/function-template.mustache b/clang-tools-extra/clang-doc/assets/function-template.mustache index 2510a4de2cd68..dc787bf0c8694 100644 --- a/clang-tools-extra/clang-doc/assets/function-template.mustache +++ b/clang-tools-extra/clang-doc/assets/function-template.mustache @@ -8,11 +8,7 @@
{{! Function Prototype }} -
-            
-{{ReturnType.Name}} {{Name}} ({{#Params}}{{^End}}{{Type}} {{Name}}, {{/End}}{{#End}}{{Type}} {{Name}}{{/End}}{{/Params}})
-            
-        
+
{{ReturnType.Name}} {{Name}} ({{#Params}}{{^End}}{{Type}} {{Name}}, {{/End}}{{#End}}{{Type}} {{Name}}{{/End}}{{/Params}})
{{! Function Comments }} {{#Description}}
diff --git a/clang-tools-extra/test/clang-doc/basic-project.mustache.test b/clang-tools-extra/test/clang-doc/basic-project.mustache.test index a3041336327e8..9f7de6e689313 100644 --- a/clang-tools-extra/test/clang-doc/basic-project.mustache.test +++ b/clang-tools-extra/test/clang-doc/basic-project.mustache.test @@ -60,84 +60,72 @@ HTML-SHAPE:
HTML-SHAPE:
HTML-SHAPE:
HTML-SHAPE:

class Shape

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

Abstract base class for shapes.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

Provides a common interface for different types of shapes.

-HTML-SHAPE:
-HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

Abstract base class for shapes.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

Provides a common interface for different types of shapes.

+HTML-SHAPE:
+HTML-SHAPE:
HTML-SHAPE:
HTML-SHAPE:
HTML-SHAPE:
HTML-SHAPE:

Public Methods

HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:             
-HTML-SHAPE: double area ()
-HTML-SHAPE:             
-HTML-SHAPE:         
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

Calculates the area of the shape.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:

Returns

-HTML-SHAPE:

double The area of the shape.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:             
-HTML-SHAPE: double perimeter ()
-HTML-SHAPE:             
-HTML-SHAPE:         
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

Calculates the perimeter of the shape.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:

Returns

-HTML-SHAPE:

double The perimeter of the shape.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:             
-HTML-SHAPE: void ~Shape ()
-HTML-SHAPE:             
-HTML-SHAPE:         
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

Virtual destructor.

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:

-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
-HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
double area ()
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

Calculates the area of the shape.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:

Returns

+HTML-SHAPE:

double The area of the shape.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
double perimeter ()
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

Calculates the perimeter of the shape.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:

Returns

+HTML-SHAPE:

double The perimeter of the shape.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
void ~Shape ()
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

Virtual destructor.

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:

+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
+HTML-SHAPE:
HTML-SHAPE: HTML-SHAPE:
HTML-SHAPE:
@@ -217,219 +205,164 @@ HTML-CALC:
HTML-CALC:
HTML-CALC:
HTML-CALC:

class Calculator

-HTML-CALC:
-HTML-CALC:

A simple calculator class.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Provides basic arithmetic operations.

-HTML-CALC:
-HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

A simple calculator class.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Provides basic arithmetic operations.

+HTML-CALC:
+HTML-CALC:
HTML-CALC:
HTML-CALC: HTML-CALC:
HTML-CALC:

Public Members

HTML-CALC:
HTML-CALC:
-HTML-CALC:
-HTML-CALC: int public_val
-HTML-CALC:                         
+HTML-CALC:
int public_val
HTML-CALC:
HTML-CALC:
-HTML-CALC:
-HTML-CALC: const int static_val
-HTML-CALC:                         
+HTML-CALC:
const int static_val
HTML-CALC:
HTML-CALC:
HTML-CALC:
HTML-CALC:
HTML-CALC:

Public Methods

HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:             
-HTML-CALC: int add (int a, int b)
-HTML-CALC:             
-HTML-CALC:         
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Adds two integers.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:

Parameters

-HTML-CALC:
-HTML-CALC: a
-HTML-CALC:

First integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC: b
-HTML-CALC:

Second integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Returns

-HTML-CALC:

int The sum of a and b.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:             
-HTML-CALC: int subtract (int a, int b)
-HTML-CALC:             
-HTML-CALC:         
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Subtracts the second integer from the first.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:

Returns

-HTML-CALC:

int The result of a - b.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:             
-HTML-CALC: int multiply (int a, int b)
-HTML-CALC:             
-HTML-CALC:         
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Multiplies two integers.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:

Parameters

-HTML-CALC:
-HTML-CALC: a
-HTML-CALC:

First integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC: b
-HTML-CALC:

Second integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Returns

-HTML-CALC:

int The product of a and b.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:             
-HTML-CALC: double divide (int a, int b)
-HTML-CALC:             
-HTML-CALC:         
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Divides the first integer by the second.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:

Parameters

-HTML-CALC:
-HTML-CALC: a
-HTML-CALC:

First integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC: b
-HTML-CALC:

Second integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Returns

-HTML-CALC:

double The result of a / b.

-HTML-CALC:

-HTML-CALC:

Throws

-HTML-CALC:
-HTML-CALC: std::invalid_argument if b is zero. -HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:             
-HTML-CALC: int mod (int a, int b)
-HTML-CALC:             
-HTML-CALC:         
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Performs the mod operation on integers.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:

Parameters

-HTML-CALC:
-HTML-CALC: a
-HTML-CALC:

First integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC: b
-HTML-CALC:

Second integer.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:

Returns

-HTML-CALC:

The result of a % b.

-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
-HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
int add (int a, int b)
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Adds two integers.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:

Parameters

+HTML-CALC:
+HTML-CALC: a First integer. +HTML-CALC:
+HTML-CALC:
+HTML-CALC: b Second integer. +HTML-CALC:
+HTML-CALC:

Returns

+HTML-CALC:

int The sum of a and b.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
int subtract (int a, int b)
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Subtracts the second integer from the first.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:

Parameters

+HTML-CALC:
+HTML-CALC: a First integer. +HTML-CALC:
+HTML-CALC:
+HTML-CALC: b Second integer. +HTML-CALC:
+HTML-CALC:

Returns

+HTML-CALC:

int The result of a - b.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
int multiply (int a, int b)
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Multiplies two integers.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:

Parameters

+HTML-CALC:
+HTML-CALC: a First integer. +HTML-CALC:
+HTML-CALC:
+HTML-CALC: b Second integer. +HTML-CALC:
+HTML-CALC:

Returns

+HTML-CALC:

int The product of a and b.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
double divide (int a, int b)
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Divides the first integer by the second.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:

Parameters

+HTML-CALC:
+HTML-CALC: a First integer. +HTML-CALC:
+HTML-CALC:
+HTML-CALC: b Second integer. +HTML-CALC:
+HTML-CALC:

Returns

+HTML-CALC:

double The result of a / b.

+HTML-CALC:

+HTML-CALC:

Throws

+HTML-CALC:
+HTML-CALC: std::invalid_argument if b is zero. +HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
int mod (int a, int b)
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

Performs the mod operation on integers.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:

+HTML-CALC:
+HTML-CALC:

Parameters

+HTML-CALC:
+HTML-CALC: a First integer. +HTML-CALC:
+HTML-CALC:
+HTML-CALC: b Second integer. +HTML-CALC:
+HTML-CALC:

Returns

+HTML-CALC:

The result of a % b.

+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
+HTML-CALC:
HTML-CALC:
HTML-CALC:
HTML-CALC: @@ -438,6 +371,7 @@ HTML-CALC: HTML-CALC: + HTML-RECTANGLE: HTML-RECTANGLE: HTML-RECTANGLE: @@ -492,101 +426,82 @@ HTML-RECTANGLE:
HTML-RECTANGLE:
HTML-RECTANGLE:
HTML-RECTANGLE:

class Rectangle

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

Rectangle class derived from Shape.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

Represents a rectangle with a given width and height.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

Rectangle class derived from Shape.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

Represents a rectangle with a given width and height.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
HTML-RECTANGLE:
HTML-RECTANGLE:
HTML-RECTANGLE:
HTML-RECTANGLE:

Public Methods

HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:             
-HTML-RECTANGLE: void Rectangle (double width, double height)
-HTML-RECTANGLE:             
-HTML-RECTANGLE:         
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

Constructs a new Rectangle object.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:

Parameters

-HTML-RECTANGLE:
-HTML-RECTANGLE: width
-HTML-RECTANGLE:

Width of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE: height
-HTML-RECTANGLE:

Height of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:             
-HTML-RECTANGLE: double area ()
-HTML-RECTANGLE:             
-HTML-RECTANGLE:         
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

Calculates the area of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:

Returns

-HTML-RECTANGLE:

double The area of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:             
-HTML-RECTANGLE: double perimeter ()
-HTML-RECTANGLE:             
-HTML-RECTANGLE:         
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

Calculates the perimeter of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:

-HTML-RECTANGLE:
-HTML-RECTANGLE:

Returns

-HTML-RECTANGLE:

double The perimeter of the rectangle.

-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
-HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
void Rectangle (double width, double height)
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

Constructs a new Rectangle object.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:

Parameters

+HTML-RECTANGLE:
+HTML-RECTANGLE: width Width of the rectangle. +HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE: height Height of the rectangle. +HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
double area ()
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

Calculates the area of the rectangle.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:

Returns

+HTML-RECTANGLE:

double The area of the rectangle.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
double perimeter ()
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

Calculates the perimeter of the rectangle.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:

+HTML-RECTANGLE:
+HTML-RECTANGLE:

Returns

+HTML-RECTANGLE:

double The perimeter of the rectangle.

+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
+HTML-RECTANGLE:
HTML-RECTANGLE: HTML-RECTANGLE: HTML-RECTANGLE: @@ -595,6 +510,7 @@ HTML-RECTANGLE: HTML-RECTANGLE: + HTML-CIRCLE: HTML-CIRCLE: HTML-CIRCLE: @@ -649,102 +565,91 @@ HTML-CIRCLE:
HTML-CIRCLE:
HTML-CIRCLE:
HTML-CIRCLE:

class Circle

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

Circle class derived from Shape.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

Represents a circle with a given radius.

-HTML-CIRCLE:
-HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

Circle class derived from Shape.

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

Represents a circle with a given radius.

+HTML-CIRCLE:
+HTML-CIRCLE:
HTML-CIRCLE:
HTML-CIRCLE:
HTML-CIRCLE:
HTML-CIRCLE:

Public Methods

HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:             
-HTML-CIRCLE: void Circle (double radius)
-HTML-CIRCLE:             
-HTML-CIRCLE:         
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

Constructs a new Circle object.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:

Parameters

-HTML-CIRCLE:
-HTML-CIRCLE: radius
-HTML-CIRCLE:

Radius of the circle.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:             
-HTML-CIRCLE: double area ()
-HTML-CIRCLE:             
-HTML-CIRCLE:         
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

Calculates the area of the circle.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:

Returns

-HTML-CIRCLE:

double The area of the circle.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:             
-HTML-CIRCLE: double perimeter ()
-HTML-CIRCLE:             
-HTML-CIRCLE:         
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

Calculates the perimeter of the circle.

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:

-HTML-CIRCLE:
-HTML-CIRCLE:

Returns

-HTML-CIRCLE:

double The perimeter of the circle.

-HTML-CIRCLE:

Code

-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:                            
-HTML-CIRCLE:                            Circle circle(5.0);
-HTML-CIRCLE:                            double perimeter = circle.perimeter();
-HTML-CIRCLE:                            
-HTML-CIRCLE:                        
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
-HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
void Circle (double radius)
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

Constructs a new Circle object.

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:

Parameters

+HTML-CIRCLE:
+HTML-CIRCLE: radius Radius of the circle. +HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
double area ()
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

Calculates the area of the circle.

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:

Returns

+HTML-CIRCLE:

double The area of the circle.

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
double perimeter ()
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

Calculates the perimeter of the circle.

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:

+HTML-CIRCLE:
+HTML-CIRCLE:

Returns

+HTML-CIRCLE:

double The perimeter of the circle.

+HTML-CIRCLE:

Code

+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:                                         
+HTML-CIRCLE:                                              Circle circle(5.0);
+HTML-CIRCLE:                                              double perimeter = circle.perimeter();
+HTML-CIRCLE:                                         
+HTML-CIRCLE:                                     
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
+HTML-CIRCLE:
HTML-CIRCLE: HTML-CIRCLE: HTML-CIRCLE: From 12d72050e1255decb67d53125e86d348db2951d6 Mon Sep 17 00:00:00 2001 From: Igor Kudrin Date: Wed, 19 Nov 2025 13:38:41 -0800 Subject: [PATCH 29/48] [lldb][test] Correctly skip a test on a 32-bit target (#168631) The test was added in #147252. On a 32-bit target, it fails with error: ``` File "...\TestDataFormatterLibcxxInvalidString.py", line 23, in test self.skip() ^^^^^^^^^ AttributeError: 'LibcxxInvalidStringDataFormatterTestCase' object has no attribute 'skip' ``` --- .../invalid-string/TestDataFormatterLibcxxInvalidString.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/invalid-string/TestDataFormatterLibcxxInvalidString.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/invalid-string/TestDataFormatterLibcxxInvalidString.py index ae8e0ac08c2b0..b504c01b06da4 100644 --- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/invalid-string/TestDataFormatterLibcxxInvalidString.py +++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/invalid-string/TestDataFormatterLibcxxInvalidString.py @@ -20,7 +20,7 @@ def test(self): frame = thread.frames[0] if not self.process().GetAddressByteSize() == 8: - self.skip() + self.skipTest("The test requires a 64-bit process") # The test assumes that std::string is in its cap-size-data layout. self.expect( From 253ed524365e20309e0f615415c9433bd9bda44d Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Wed, 19 Nov 2025 16:49:43 -0500 Subject: [PATCH 30/48] DAG: Use poison for some vector result widening (#168290) --- .../SelectionDAG/LegalizeVectorTypes.cpp | 24 +- .../AArch64/sve-extract-scalable-vector.ll | 7 - .../vector-constrained-fp-intrinsics.ll | 266 +++++------ llvm/test/CodeGen/X86/matrix-multiply.ll | 74 +-- .../X86/vector-constrained-fp-intrinsics.ll | 434 +++++++++--------- 5 files changed, 399 insertions(+), 406 deletions(-) diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp index ef53ee6df9f06..10d5f7a9b4f65 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp @@ -5654,7 +5654,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert(SDNode *N) { // Widen the input and call convert on the widened input vector. unsigned NumConcat = WidenEC.getKnownMinValue() / InVTEC.getKnownMinValue(); - SmallVector Ops(NumConcat, DAG.getUNDEF(InVT)); + SmallVector Ops(NumConcat, DAG.getPOISON(InVT)); Ops[0] = InOp; SDValue InVec = DAG.getNode(ISD::CONCAT_VECTORS, DL, InWidenVT, Ops); if (N->getNumOperands() == 1) @@ -5673,7 +5673,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert(SDNode *N) { // Otherwise unroll into some nasty scalar code and rebuild the vector. EVT EltVT = WidenVT.getVectorElementType(); - SmallVector Ops(WidenEC.getFixedValue(), DAG.getUNDEF(EltVT)); + SmallVector Ops(WidenEC.getFixedValue(), DAG.getPOISON(EltVT)); // Use the original element count so we don't do more scalar opts than // necessary. unsigned MinElts = N->getValueType(0).getVectorNumElements(); @@ -5756,7 +5756,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert_StrictFP(SDNode *N) { // Otherwise unroll into some nasty scalar code and rebuild the vector. EVT EltVT = WidenVT.getVectorElementType(); std::array EltVTs = {{EltVT, MVT::Other}}; - SmallVector Ops(WidenNumElts, DAG.getUNDEF(EltVT)); + SmallVector Ops(WidenNumElts, DAG.getPOISON(EltVT)); SmallVector OpChains; // Use the original element count so we don't do more scalar opts than // necessary. @@ -5819,7 +5819,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_EXTEND_VECTOR_INREG(SDNode *N) { } while (Ops.size() != WidenNumElts) - Ops.push_back(DAG.getUNDEF(WidenSVT)); + Ops.push_back(DAG.getPOISON(WidenSVT)); return DAG.getBuildVector(WidenVT, DL, Ops); } @@ -6026,7 +6026,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_BITCAST(SDNode *N) { // input and then widening it. To avoid this, we widen the input only if // it results in a legal type. if (WidenSize % InSize == 0) { - SmallVector Ops(NewNumParts, DAG.getUNDEF(InVT)); + SmallVector Ops(NewNumParts, DAG.getPOISON(InVT)); Ops[0] = InOp; NewVec = DAG.getNode(ISD::CONCAT_VECTORS, dl, NewInVT, Ops); @@ -6034,7 +6034,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_BITCAST(SDNode *N) { SmallVector Ops; DAG.ExtractVectorElements(InOp, Ops); Ops.append(WidenSize / InScalarSize - Ops.size(), - DAG.getUNDEF(InVT.getVectorElementType())); + DAG.getPOISON(InVT.getVectorElementType())); NewVec = DAG.getNode(ISD::BUILD_VECTOR, dl, NewInVT, Ops); } @@ -6088,7 +6088,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_CONCAT_VECTORS(SDNode *N) { if (WidenNumElts % NumInElts == 0) { // Add undef vectors to widen to correct length. unsigned NumConcat = WidenNumElts / NumInElts; - SDValue UndefVal = DAG.getUNDEF(InVT); + SDValue UndefVal = DAG.getPOISON(InVT); SmallVector Ops(NumConcat); for (unsigned i=0; i < NumOperands; ++i) Ops[i] = N->getOperand(i); @@ -6146,7 +6146,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_CONCAT_VECTORS(SDNode *N) { for (unsigned j = 0; j < NumInElts; ++j) Ops[Idx++] = DAG.getExtractVectorElt(dl, EltVT, InOp, j); } - SDValue UndefVal = DAG.getUNDEF(EltVT); + SDValue UndefVal = DAG.getPOISON(EltVT); for (; Idx < WidenNumElts; ++Idx) Ops[Idx] = UndefVal; return DAG.getBuildVector(WidenVT, dl, Ops); @@ -6213,7 +6213,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_EXTRACT_SUBVECTOR(SDNode *N) { Parts.push_back( DAG.getExtractSubvector(dl, PartVT, InOp, IdxVal + I * GCD)); for (; I < WidenNumElts / GCD; ++I) - Parts.push_back(DAG.getUNDEF(PartVT)); + Parts.push_back(DAG.getPOISON(PartVT)); return DAG.getNode(ISD::CONCAT_VECTORS, dl, WidenVT, Parts); } @@ -6229,7 +6229,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_EXTRACT_SUBVECTOR(SDNode *N) { for (i = 0; i < VTNumElts; ++i) Ops[i] = DAG.getExtractVectorElt(dl, EltVT, InOp, IdxVal + i); - SDValue UndefVal = DAG.getUNDEF(EltVT); + SDValue UndefVal = DAG.getPOISON(EltVT); for (; i < WidenNumElts; ++i) Ops[i] = UndefVal; return DAG.getBuildVector(WidenVT, dl, Ops); @@ -6903,7 +6903,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_VECTOR_REVERSE(SDNode *N) { Parts.push_back( DAG.getExtractSubvector(dl, PartVT, ReverseVal, IdxVal + i * GCD)); for (; i < WidenNumElts / GCD; ++i) - Parts.push_back(DAG.getUNDEF(PartVT)); + Parts.push_back(DAG.getPOISON(PartVT)); return DAG.getNode(ISD::CONCAT_VECTORS, dl, WidenVT, Parts); } @@ -6992,7 +6992,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_STRICT_FSETCC(SDNode *N) { EVT TmpEltVT = LHS.getValueType().getVectorElementType(); // Fully unroll and reassemble. - SmallVector Scalars(WidenNumElts, DAG.getUNDEF(EltVT)); + SmallVector Scalars(WidenNumElts, DAG.getPOISON(EltVT)); SmallVector Chains(NumElts); for (unsigned i = 0; i != NumElts; ++i) { SDValue LHSElem = DAG.getExtractVectorElt(dl, TmpEltVT, LHS, i); diff --git a/llvm/test/CodeGen/AArch64/sve-extract-scalable-vector.ll b/llvm/test/CodeGen/AArch64/sve-extract-scalable-vector.ll index f6251ff66299e..8fc27248abac3 100644 --- a/llvm/test/CodeGen/AArch64/sve-extract-scalable-vector.ll +++ b/llvm/test/CodeGen/AArch64/sve-extract-scalable-vector.ll @@ -612,13 +612,6 @@ define @extract_nxv14i8_nxv28i8_14( %in) { ; CHECK-NEXT: uunpkhi z3.d, z3.s ; CHECK-NEXT: uzp1 z1.s, z1.s, z3.s ; CHECK-NEXT: uzp1 z1.h, z2.h, z1.h -; CHECK-NEXT: uzp1 z1.b, z0.b, z1.b -; CHECK-NEXT: uunpkhi z1.h, z1.b -; CHECK-NEXT: uunpkhi z2.s, z1.h -; CHECK-NEXT: uunpklo z1.s, z1.h -; CHECK-NEXT: uunpklo z2.d, z2.s -; CHECK-NEXT: uzp1 z2.s, z2.s, z0.s -; CHECK-NEXT: uzp1 z1.h, z1.h, z2.h ; CHECK-NEXT: uzp1 z0.b, z0.b, z1.b ; CHECK-NEXT: ret %res = call @llvm.vector.extract.nxv14i8.nxv28i8( %in, i64 14) diff --git a/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll b/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll index 71c3069a406fe..08ca1d153248e 100644 --- a/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll +++ b/llvm/test/CodeGen/PowerPC/vector-constrained-fp-intrinsics.ll @@ -5286,16 +5286,16 @@ entry: define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32(<3 x float> %x) #0 { ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 -; PC64LE-NEXT: xxswapd 1, 34 +; PC64LE-NEXT: xxswapd 0, 34 +; PC64LE-NEXT: xxsldwi 1, 34, 34, 3 ; PC64LE-NEXT: xscvspdpn 0, 0 ; PC64LE-NEXT: xscvspdpn 1, 1 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 ; PC64LE-NEXT: xscvdpsxws 0, 0 ; PC64LE-NEXT: xscvdpsxws 1, 1 ; PC64LE-NEXT: mffprwz 3, 0 -; PC64LE-NEXT: mtfprwz 0, 3 -; PC64LE-NEXT: mffprwz 3, 1 +; PC64LE-NEXT: mffprwz 4, 1 +; PC64LE-NEXT: mtfprwz 0, 4 ; PC64LE-NEXT: mtfprwz 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI97_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI97_0@toc@l @@ -5311,25 +5311,25 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32(<3 x float> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 -; PC64LE9-NEXT: xxswapd 1, 34 +; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 ; PC64LE9-NEXT: xscvspdpn 0, 0 -; PC64LE9-NEXT: xscvspdpn 1, 1 ; PC64LE9-NEXT: xscvdpsxws 0, 0 -; PC64LE9-NEXT: xscvdpsxws 1, 1 ; PC64LE9-NEXT: mffprwz 3, 0 -; PC64LE9-NEXT: mtfprwz 0, 3 -; PC64LE9-NEXT: mffprwz 3, 1 -; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI97_0@toc@ha -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 -; PC64LE9-NEXT: addi 3, 3, .LCPI97_0@toc@l -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: xscvspdpn 1, 1 -; PC64LE9-NEXT: xscvdpsxws 1, 1 -; PC64LE9-NEXT: mffprwz 3, 1 +; PC64LE9-NEXT: xxswapd 0, 34 +; PC64LE9-NEXT: xscvspdpn 0, 0 +; PC64LE9-NEXT: xscvdpsxws 0, 0 +; PC64LE9-NEXT: mffprwz 4, 0 +; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 ; PC64LE9-NEXT: mtvsrwz 34, 3 +; PC64LE9-NEXT: mtfprwz 1, 4 +; PC64LE9-NEXT: addis 4, 2, .LCPI97_0@toc@ha +; PC64LE9-NEXT: xscvspdpn 0, 0 +; PC64LE9-NEXT: addi 4, 4, .LCPI97_0@toc@l +; PC64LE9-NEXT: xscvdpsxws 0, 0 +; PC64LE9-NEXT: mffprwz 5, 0 +; PC64LE9-NEXT: mtfprwz 0, 5 +; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: lxv 0, 0(4) ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -5558,11 +5558,11 @@ entry: define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64(<3 x double> %x) #0 { ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xscvdpsxws 0, 1 -; PC64LE-NEXT: xscvdpsxws 1, 2 +; PC64LE-NEXT: xscvdpsxws 0, 2 +; PC64LE-NEXT: xscvdpsxws 1, 1 ; PC64LE-NEXT: mffprwz 3, 0 -; PC64LE-NEXT: mtfprwz 0, 3 -; PC64LE-NEXT: mffprwz 3, 1 +; PC64LE-NEXT: mffprwz 4, 1 +; PC64LE-NEXT: mtfprwz 0, 4 ; PC64LE-NEXT: mtfprwz 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI105_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI105_0@toc@l @@ -5577,19 +5577,19 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64(<3 x double> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: xscvdpsxws 0, 1 -; PC64LE9-NEXT: xscvdpsxws 1, 2 +; PC64LE9-NEXT: xscvdpsxws 0, 3 ; PC64LE9-NEXT: mffprwz 3, 0 -; PC64LE9-NEXT: mtfprwz 0, 3 -; PC64LE9-NEXT: mffprwz 3, 1 -; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI105_0@toc@ha -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: xscvdpsxws 1, 3 -; PC64LE9-NEXT: addi 3, 3, .LCPI105_0@toc@l -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: mffprwz 3, 1 +; PC64LE9-NEXT: xscvdpsxws 0, 2 ; PC64LE9-NEXT: mtvsrwz 34, 3 +; PC64LE9-NEXT: mffprwz 4, 0 +; PC64LE9-NEXT: xscvdpsxws 0, 1 +; PC64LE9-NEXT: mtfprwz 1, 4 +; PC64LE9-NEXT: addis 4, 2, .LCPI105_0@toc@ha +; PC64LE9-NEXT: addi 4, 4, .LCPI105_0@toc@l +; PC64LE9-NEXT: mffprwz 5, 0 +; PC64LE9-NEXT: mtfprwz 0, 5 +; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: lxv 0, 0(4) ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -5783,16 +5783,16 @@ entry: define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32(<3 x float> %x) #0 { ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xxsldwi 0, 34, 34, 3 -; PC64LE-NEXT: xxswapd 1, 34 +; PC64LE-NEXT: xxswapd 0, 34 +; PC64LE-NEXT: xxsldwi 1, 34, 34, 3 ; PC64LE-NEXT: xscvspdpn 0, 0 ; PC64LE-NEXT: xscvspdpn 1, 1 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1 ; PC64LE-NEXT: xscvdpuxws 0, 0 ; PC64LE-NEXT: xscvdpuxws 1, 1 ; PC64LE-NEXT: mffprwz 3, 0 -; PC64LE-NEXT: mtfprwz 0, 3 -; PC64LE-NEXT: mffprwz 3, 1 +; PC64LE-NEXT: mffprwz 4, 1 +; PC64LE-NEXT: mtfprwz 0, 4 ; PC64LE-NEXT: mtfprwz 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI113_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI113_0@toc@l @@ -5808,25 +5808,25 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32(<3 x float> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 -; PC64LE9-NEXT: xxswapd 1, 34 +; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1 ; PC64LE9-NEXT: xscvspdpn 0, 0 -; PC64LE9-NEXT: xscvspdpn 1, 1 ; PC64LE9-NEXT: xscvdpuxws 0, 0 -; PC64LE9-NEXT: xscvdpuxws 1, 1 ; PC64LE9-NEXT: mffprwz 3, 0 -; PC64LE9-NEXT: mtfprwz 0, 3 -; PC64LE9-NEXT: mffprwz 3, 1 -; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI113_0@toc@ha -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1 -; PC64LE9-NEXT: addi 3, 3, .LCPI113_0@toc@l -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: xscvspdpn 1, 1 -; PC64LE9-NEXT: xscvdpuxws 1, 1 -; PC64LE9-NEXT: mffprwz 3, 1 +; PC64LE9-NEXT: xxswapd 0, 34 +; PC64LE9-NEXT: xscvspdpn 0, 0 +; PC64LE9-NEXT: xscvdpuxws 0, 0 +; PC64LE9-NEXT: mffprwz 4, 0 +; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3 ; PC64LE9-NEXT: mtvsrwz 34, 3 +; PC64LE9-NEXT: mtfprwz 1, 4 +; PC64LE9-NEXT: addis 4, 2, .LCPI113_0@toc@ha +; PC64LE9-NEXT: xscvspdpn 0, 0 +; PC64LE9-NEXT: addi 4, 4, .LCPI113_0@toc@l +; PC64LE9-NEXT: xscvdpuxws 0, 0 +; PC64LE9-NEXT: mffprwz 5, 0 +; PC64LE9-NEXT: mtfprwz 0, 5 +; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: lxv 0, 0(4) ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -6054,11 +6054,11 @@ entry: define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64(<3 x double> %x) #0 { ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xscvdpuxws 0, 1 -; PC64LE-NEXT: xscvdpuxws 1, 2 +; PC64LE-NEXT: xscvdpuxws 0, 2 +; PC64LE-NEXT: xscvdpuxws 1, 1 ; PC64LE-NEXT: mffprwz 3, 0 -; PC64LE-NEXT: mtfprwz 0, 3 -; PC64LE-NEXT: mffprwz 3, 1 +; PC64LE-NEXT: mffprwz 4, 1 +; PC64LE-NEXT: mtfprwz 0, 4 ; PC64LE-NEXT: mtfprwz 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI121_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI121_0@toc@l @@ -6073,19 +6073,19 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64(<3 x double> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: xscvdpuxws 0, 1 -; PC64LE9-NEXT: xscvdpuxws 1, 2 +; PC64LE9-NEXT: xscvdpuxws 0, 3 ; PC64LE9-NEXT: mffprwz 3, 0 -; PC64LE9-NEXT: mtfprwz 0, 3 -; PC64LE9-NEXT: mffprwz 3, 1 -; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI121_0@toc@ha -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: xscvdpuxws 1, 3 -; PC64LE9-NEXT: addi 3, 3, .LCPI121_0@toc@l -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: mffprwz 3, 1 +; PC64LE9-NEXT: xscvdpuxws 0, 2 ; PC64LE9-NEXT: mtvsrwz 34, 3 +; PC64LE9-NEXT: mffprwz 4, 0 +; PC64LE9-NEXT: xscvdpuxws 0, 1 +; PC64LE9-NEXT: mtfprwz 1, 4 +; PC64LE9-NEXT: addis 4, 2, .LCPI121_0@toc@ha +; PC64LE9-NEXT: addi 4, 4, .LCPI121_0@toc@l +; PC64LE9-NEXT: mffprwz 5, 0 +; PC64LE9-NEXT: mtfprwz 0, 5 +; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: lxv 0, 0(4) ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -6269,33 +6269,33 @@ entry: define <3 x float> @constrained_vector_fptrunc_v3f64(<3 x double> %x) #0 { ; PC64LE-LABEL: constrained_vector_fptrunc_v3f64: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xsrsp 0, 1 -; PC64LE-NEXT: xsrsp 1, 2 +; PC64LE-NEXT: xsrsp 0, 3 +; PC64LE-NEXT: xsrsp 2, 2 ; PC64LE-NEXT: addis 3, 2, .LCPI129_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI129_0@toc@l -; PC64LE-NEXT: xscvdpspn 0, 0 +; PC64LE-NEXT: xsrsp 1, 1 ; PC64LE-NEXT: xscvdpspn 1, 1 -; PC64LE-NEXT: xxmrghw 34, 1, 0 -; PC64LE-NEXT: lxvd2x 0, 0, 3 -; PC64LE-NEXT: xxswapd 35, 0 -; PC64LE-NEXT: xsrsp 0, 3 +; PC64LE-NEXT: xscvdpspn 2, 2 ; PC64LE-NEXT: xscvdpspn 36, 0 +; PC64LE-NEXT: xxmrghw 34, 2, 1 +; PC64LE-NEXT: lxvd2x 1, 0, 3 +; PC64LE-NEXT: xxswapd 35, 1 ; PC64LE-NEXT: vperm 2, 4, 2, 3 ; PC64LE-NEXT: blr ; ; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: xsrsp 0, 1 -; PC64LE9-NEXT: xsrsp 1, 2 +; PC64LE9-NEXT: xsrsp 0, 3 +; PC64LE9-NEXT: xsrsp 2, 2 +; PC64LE9-NEXT: xsrsp 1, 1 ; PC64LE9-NEXT: addis 3, 2, .LCPI129_0@toc@ha ; PC64LE9-NEXT: addi 3, 3, .LCPI129_0@toc@l -; PC64LE9-NEXT: xscvdpspn 0, 0 ; PC64LE9-NEXT: xscvdpspn 1, 1 -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: xsrsp 1, 3 -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: xscvdpspn 34, 1 -; PC64LE9-NEXT: xxperm 34, 35, 0 +; PC64LE9-NEXT: xscvdpspn 2, 2 +; PC64LE9-NEXT: xscvdpspn 34, 0 +; PC64LE9-NEXT: xxmrghw 35, 2, 1 +; PC64LE9-NEXT: lxv 1, 0(3) +; PC64LE9-NEXT: xxperm 34, 35, 1 ; PC64LE9-NEXT: blr entry: %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64( @@ -7142,8 +7142,8 @@ entry: define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i32: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xxswapd 0, 34 -; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 +; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 +; PC64LE-NEXT: xxswapd 1, 34 ; PC64LE-NEXT: mffprwz 3, 0 ; PC64LE-NEXT: mtfprwa 0, 3 ; PC64LE-NEXT: mffprwz 3, 1 @@ -7154,7 +7154,7 @@ define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; PC64LE-NEXT: xscvsxdsp 1, 1 ; PC64LE-NEXT: xscvdpspn 0, 0 ; PC64LE-NEXT: xscvdpspn 1, 1 -; PC64LE-NEXT: xxmrghw 35, 1, 0 +; PC64LE-NEXT: xxmrghw 35, 0, 1 ; PC64LE-NEXT: lxvd2x 0, 0, 3 ; PC64LE-NEXT: mfvsrwz 3, 34 ; PC64LE-NEXT: xxswapd 36, 0 @@ -7166,24 +7166,24 @@ define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i32: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: li 3, 0 +; PC64LE9-NEXT: li 3, 4 ; PC64LE9-NEXT: vextuwrx 3, 3, 2 ; PC64LE9-NEXT: mtfprwa 0, 3 -; PC64LE9-NEXT: li 3, 4 +; PC64LE9-NEXT: li 3, 0 ; PC64LE9-NEXT: vextuwrx 3, 3, 2 ; PC64LE9-NEXT: xscvsxdsp 0, 0 ; PC64LE9-NEXT: mtfprwa 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI161_0@toc@ha +; PC64LE9-NEXT: mfvsrwz 3, 34 ; PC64LE9-NEXT: xscvsxdsp 1, 1 -; PC64LE9-NEXT: addi 3, 3, .LCPI161_0@toc@l +; PC64LE9-NEXT: mtfprwa 2, 3 +; PC64LE9-NEXT: addis 3, 2, .LCPI161_0@toc@ha +; PC64LE9-NEXT: xscvsxdsp 2, 2 ; PC64LE9-NEXT: xscvdpspn 0, 0 +; PC64LE9-NEXT: addi 3, 3, .LCPI161_0@toc@l ; PC64LE9-NEXT: xscvdpspn 1, 1 -; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: xscvdpspn 34, 2 +; PC64LE9-NEXT: xxmrghw 35, 0, 1 ; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: mfvsrwz 3, 34 -; PC64LE9-NEXT: mtfprwa 1, 3 -; PC64LE9-NEXT: xscvsxdsp 1, 1 -; PC64LE9-NEXT: xscvdpspn 34, 1 ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -7225,15 +7225,15 @@ entry: define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i64: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: mtfprd 0, 3 -; PC64LE-NEXT: mtfprd 1, 4 +; PC64LE-NEXT: mtfprd 0, 4 +; PC64LE-NEXT: mtfprd 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI163_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI163_0@toc@l ; PC64LE-NEXT: xscvsxdsp 0, 0 ; PC64LE-NEXT: xscvsxdsp 1, 1 -; PC64LE-NEXT: xscvdpspn 0, 0 ; PC64LE-NEXT: xscvdpspn 1, 1 -; PC64LE-NEXT: xxmrghw 34, 1, 0 +; PC64LE-NEXT: xscvdpspn 0, 0 +; PC64LE-NEXT: xxmrghw 34, 0, 1 ; PC64LE-NEXT: lxvd2x 0, 0, 3 ; PC64LE-NEXT: xxswapd 35, 0 ; PC64LE-NEXT: mtfprd 0, 5 @@ -7244,20 +7244,20 @@ define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i64: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: mtfprd 0, 3 ; PC64LE9-NEXT: mtfprd 1, 4 +; PC64LE9-NEXT: mtfprd 2, 3 +; PC64LE9-NEXT: mtfprd 0, 5 ; PC64LE9-NEXT: addis 3, 2, .LCPI163_0@toc@ha -; PC64LE9-NEXT: xscvsxdsp 0, 0 ; PC64LE9-NEXT: xscvsxdsp 1, 1 +; PC64LE9-NEXT: xscvsxdsp 2, 2 +; PC64LE9-NEXT: xscvsxdsp 0, 0 ; PC64LE9-NEXT: addi 3, 3, .LCPI163_0@toc@l -; PC64LE9-NEXT: xscvdpspn 0, 0 +; PC64LE9-NEXT: xscvdpspn 2, 2 ; PC64LE9-NEXT: xscvdpspn 1, 1 -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: mtfprd 1, 5 -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: xscvsxdsp 1, 1 -; PC64LE9-NEXT: xscvdpspn 34, 1 -; PC64LE9-NEXT: xxperm 34, 35, 0 +; PC64LE9-NEXT: xscvdpspn 34, 0 +; PC64LE9-NEXT: xxmrghw 35, 1, 2 +; PC64LE9-NEXT: lxv 1, 0(3) +; PC64LE9-NEXT: xxperm 34, 35, 1 ; PC64LE9-NEXT: blr entry: %result = call <3 x float> @@ -7709,8 +7709,8 @@ entry: define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i32: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: xxswapd 0, 34 -; PC64LE-NEXT: xxsldwi 1, 34, 34, 1 +; PC64LE-NEXT: xxsldwi 0, 34, 34, 1 +; PC64LE-NEXT: xxswapd 1, 34 ; PC64LE-NEXT: mffprwz 3, 0 ; PC64LE-NEXT: mtfprwz 0, 3 ; PC64LE-NEXT: mffprwz 3, 1 @@ -7721,7 +7721,7 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; PC64LE-NEXT: xscvuxdsp 1, 1 ; PC64LE-NEXT: xscvdpspn 0, 0 ; PC64LE-NEXT: xscvdpspn 1, 1 -; PC64LE-NEXT: xxmrghw 35, 1, 0 +; PC64LE-NEXT: xxmrghw 35, 0, 1 ; PC64LE-NEXT: lxvd2x 0, 0, 3 ; PC64LE-NEXT: mfvsrwz 3, 34 ; PC64LE-NEXT: xxswapd 36, 0 @@ -7733,24 +7733,24 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i32: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: li 3, 0 +; PC64LE9-NEXT: li 3, 4 ; PC64LE9-NEXT: vextuwrx 3, 3, 2 ; PC64LE9-NEXT: mtfprwz 0, 3 -; PC64LE9-NEXT: li 3, 4 +; PC64LE9-NEXT: li 3, 0 ; PC64LE9-NEXT: vextuwrx 3, 3, 2 ; PC64LE9-NEXT: xscvuxdsp 0, 0 ; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: addis 3, 2, .LCPI179_0@toc@ha +; PC64LE9-NEXT: mfvsrwz 3, 34 ; PC64LE9-NEXT: xscvuxdsp 1, 1 -; PC64LE9-NEXT: addi 3, 3, .LCPI179_0@toc@l +; PC64LE9-NEXT: mtfprwz 2, 3 +; PC64LE9-NEXT: addis 3, 2, .LCPI179_0@toc@ha +; PC64LE9-NEXT: xscvuxdsp 2, 2 ; PC64LE9-NEXT: xscvdpspn 0, 0 +; PC64LE9-NEXT: addi 3, 3, .LCPI179_0@toc@l ; PC64LE9-NEXT: xscvdpspn 1, 1 -; PC64LE9-NEXT: xxmrghw 35, 1, 0 +; PC64LE9-NEXT: xscvdpspn 34, 2 +; PC64LE9-NEXT: xxmrghw 35, 0, 1 ; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: mfvsrwz 3, 34 -; PC64LE9-NEXT: mtfprwz 1, 3 -; PC64LE9-NEXT: xscvuxdsp 1, 1 -; PC64LE9-NEXT: xscvdpspn 34, 1 ; PC64LE9-NEXT: xxperm 34, 35, 0 ; PC64LE9-NEXT: blr entry: @@ -7792,15 +7792,15 @@ entry: define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i64: ; PC64LE: # %bb.0: # %entry -; PC64LE-NEXT: mtfprd 0, 3 -; PC64LE-NEXT: mtfprd 1, 4 +; PC64LE-NEXT: mtfprd 0, 4 +; PC64LE-NEXT: mtfprd 1, 3 ; PC64LE-NEXT: addis 3, 2, .LCPI181_0@toc@ha ; PC64LE-NEXT: addi 3, 3, .LCPI181_0@toc@l ; PC64LE-NEXT: xscvuxdsp 0, 0 ; PC64LE-NEXT: xscvuxdsp 1, 1 -; PC64LE-NEXT: xscvdpspn 0, 0 ; PC64LE-NEXT: xscvdpspn 1, 1 -; PC64LE-NEXT: xxmrghw 34, 1, 0 +; PC64LE-NEXT: xscvdpspn 0, 0 +; PC64LE-NEXT: xxmrghw 34, 0, 1 ; PC64LE-NEXT: lxvd2x 0, 0, 3 ; PC64LE-NEXT: xxswapd 35, 0 ; PC64LE-NEXT: mtfprd 0, 5 @@ -7811,20 +7811,20 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i64: ; PC64LE9: # %bb.0: # %entry -; PC64LE9-NEXT: mtfprd 0, 3 ; PC64LE9-NEXT: mtfprd 1, 4 +; PC64LE9-NEXT: mtfprd 2, 3 +; PC64LE9-NEXT: mtfprd 0, 5 ; PC64LE9-NEXT: addis 3, 2, .LCPI181_0@toc@ha -; PC64LE9-NEXT: xscvuxdsp 0, 0 ; PC64LE9-NEXT: xscvuxdsp 1, 1 +; PC64LE9-NEXT: xscvuxdsp 2, 2 +; PC64LE9-NEXT: xscvuxdsp 0, 0 ; PC64LE9-NEXT: addi 3, 3, .LCPI181_0@toc@l -; PC64LE9-NEXT: xscvdpspn 0, 0 +; PC64LE9-NEXT: xscvdpspn 2, 2 ; PC64LE9-NEXT: xscvdpspn 1, 1 -; PC64LE9-NEXT: xxmrghw 35, 1, 0 -; PC64LE9-NEXT: mtfprd 1, 5 -; PC64LE9-NEXT: lxv 0, 0(3) -; PC64LE9-NEXT: xscvuxdsp 1, 1 -; PC64LE9-NEXT: xscvdpspn 34, 1 -; PC64LE9-NEXT: xxperm 34, 35, 0 +; PC64LE9-NEXT: xscvdpspn 34, 0 +; PC64LE9-NEXT: xxmrghw 35, 1, 2 +; PC64LE9-NEXT: lxv 1, 0(3) +; PC64LE9-NEXT: xxperm 34, 35, 1 ; PC64LE9-NEXT: blr entry: %result = call <3 x float> diff --git a/llvm/test/CodeGen/X86/matrix-multiply.ll b/llvm/test/CodeGen/X86/matrix-multiply.ll index 388d8528a2b80..f38b769fe4987 100644 --- a/llvm/test/CodeGen/X86/matrix-multiply.ll +++ b/llvm/test/CodeGen/X86/matrix-multiply.ll @@ -368,46 +368,47 @@ define <9 x float> @test_mul3x3_f32(<9 x float> %a0, <9 x float> %a1) nounwind { ; AVX512F-NEXT: vaddps %xmm4, %xmm9, %xmm9 ; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0] ; AVX512F-NEXT: vmulss %xmm1, %xmm4, %xmm10 -; AVX512F-NEXT: vmovshdup {{.*#+}} xmm5 = xmm5[1,1,3,3] -; AVX512F-NEXT: vmulss %xmm6, %xmm5, %xmm6 -; AVX512F-NEXT: vaddss %xmm6, %xmm10, %xmm6 -; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm10 -; AVX512F-NEXT: vmulss %xmm8, %xmm10, %xmm8 -; AVX512F-NEXT: vaddss %xmm6, %xmm8, %xmm6 -; AVX512F-NEXT: vinsertps {{.*#+}} xmm6 = xmm9[0,1],xmm6[0],xmm9[3] +; AVX512F-NEXT: vmovshdup {{.*#+}} xmm11 = xmm5[1,1,3,3] +; AVX512F-NEXT: vmulss %xmm6, %xmm11, %xmm5 +; AVX512F-NEXT: vaddss %xmm5, %xmm10, %xmm5 +; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm6 +; AVX512F-NEXT: vmulss %xmm6, %xmm8, %xmm8 +; AVX512F-NEXT: vaddss %xmm5, %xmm8, %xmm5 +; AVX512F-NEXT: vinsertps {{.*#+}} xmm5 = xmm9[0,1],xmm5[0],xmm9[3] ; AVX512F-NEXT: vmulps %xmm7, %xmm0, %xmm8 ; AVX512F-NEXT: vextractf128 $1, %ymm1, %xmm9 -; AVX512F-NEXT: vmovsldup {{.*#+}} xmm11 = xmm9[0,0,2,2] -; AVX512F-NEXT: vmulps %xmm2, %xmm11, %xmm11 -; AVX512F-NEXT: vaddps %xmm11, %xmm8, %xmm8 -; AVX512F-NEXT: vmovshdup {{.*#+}} xmm11 = xmm9[1,1,3,3] -; AVX512F-NEXT: vmulps %xmm3, %xmm11, %xmm12 +; AVX512F-NEXT: vmovsldup {{.*#+}} xmm10 = xmm9[0,0,2,2] +; AVX512F-NEXT: vmulps %xmm2, %xmm10, %xmm10 +; AVX512F-NEXT: vaddps %xmm10, %xmm8, %xmm8 +; AVX512F-NEXT: vmovshdup {{.*#+}} xmm10 = xmm9[1,1,3,3] +; AVX512F-NEXT: vmulps %xmm3, %xmm10, %xmm12 ; AVX512F-NEXT: vaddps %xmm12, %xmm8, %xmm8 ; AVX512F-NEXT: vmulss %xmm7, %xmm4, %xmm7 -; AVX512F-NEXT: vmulss %xmm5, %xmm9, %xmm12 +; AVX512F-NEXT: vmulss %xmm9, %xmm11, %xmm12 ; AVX512F-NEXT: vaddss %xmm7, %xmm12, %xmm7 -; AVX512F-NEXT: vmulss %xmm11, %xmm10, %xmm11 -; AVX512F-NEXT: vaddss %xmm7, %xmm11, %xmm7 -; AVX512F-NEXT: vinsertps {{.*#+}} xmm7 = xmm8[0,1],xmm7[0],xmm8[3] -; AVX512F-NEXT: vshufps {{.*#+}} xmm8 = xmm9[3,3,3,3] -; AVX512F-NEXT: vshufpd {{.*#+}} xmm11 = xmm9[1,0] +; AVX512F-NEXT: vmulss %xmm6, %xmm10, %xmm10 +; AVX512F-NEXT: vaddss %xmm7, %xmm10, %xmm7 +; AVX512F-NEXT: vshufps {{.*#+}} xmm10 = xmm9[3,3,3,3] +; AVX512F-NEXT: vshufpd {{.*#+}} xmm12 = xmm9[1,0] ; AVX512F-NEXT: vshufps {{.*#+}} xmm9 = xmm9[2,2,2,2] ; AVX512F-NEXT: vmulps %xmm0, %xmm9, %xmm0 -; AVX512F-NEXT: vmulps %xmm2, %xmm8, %xmm2 +; AVX512F-NEXT: vmulps %xmm2, %xmm10, %xmm2 ; AVX512F-NEXT: vaddps %xmm2, %xmm0, %xmm0 ; AVX512F-NEXT: vextractf32x4 $2, %zmm1, %xmm1 ; AVX512F-NEXT: vbroadcastss %xmm1, %xmm2 ; AVX512F-NEXT: vmulps %xmm2, %xmm3, %xmm2 ; AVX512F-NEXT: vaddps %xmm2, %xmm0, %xmm0 -; AVX512F-NEXT: vmulss %xmm4, %xmm11, %xmm2 -; AVX512F-NEXT: vmulss %xmm5, %xmm8, %xmm3 +; AVX512F-NEXT: vmulss %xmm4, %xmm12, %xmm2 +; AVX512F-NEXT: vmulss %xmm10, %xmm11, %xmm3 ; AVX512F-NEXT: vaddss %xmm3, %xmm2, %xmm2 -; AVX512F-NEXT: vmulss %xmm1, %xmm10, %xmm1 +; AVX512F-NEXT: vmulss %xmm1, %xmm6, %xmm1 ; AVX512F-NEXT: vaddss %xmm1, %xmm2, %xmm1 -; AVX512F-NEXT: vinsertps {{.*#+}} xmm1 = xmm0[0,1],xmm1[0],xmm0[3] -; AVX512F-NEXT: vinsertf32x4 $1, %xmm7, %zmm6, %zmm2 -; AVX512F-NEXT: vpmovsxbd {{.*#+}} zmm0 = [0,1,2,4,5,6,16,17,18,0,0,0,0,0,0,0] -; AVX512F-NEXT: vpermi2ps %zmm1, %zmm2, %zmm0 +; AVX512F-NEXT: vmovshdup {{.*#+}} xmm2 = xmm8[1,1,3,3] +; AVX512F-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[2,3] +; AVX512F-NEXT: vmovlhps {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX512F-NEXT: vinsertps {{.*#+}} xmm2 = xmm5[0,1,2],xmm8[0] +; AVX512F-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 +; AVX512F-NEXT: vinsertf32x4 $2, %xmm1, %zmm0, %zmm0 ; AVX512F-NEXT: retq ; ; AVX512VL-LABEL: test_mul3x3_f32: @@ -447,26 +448,27 @@ define <9 x float> @test_mul3x3_f32(<9 x float> %a0, <9 x float> %a1) nounwind { ; AVX512VL-NEXT: vaddss %xmm7, %xmm12, %xmm7 ; AVX512VL-NEXT: vmulss %xmm11, %xmm10, %xmm11 ; AVX512VL-NEXT: vaddss %xmm7, %xmm11, %xmm7 -; AVX512VL-NEXT: vinsertps {{.*#+}} xmm5 = xmm5[0,1],xmm7[0],xmm5[3] -; AVX512VL-NEXT: vshufps {{.*#+}} xmm7 = xmm8[3,3,3,3] -; AVX512VL-NEXT: vshufpd {{.*#+}} xmm11 = xmm8[1,0] +; AVX512VL-NEXT: vshufps {{.*#+}} xmm11 = xmm8[3,3,3,3] +; AVX512VL-NEXT: vshufpd {{.*#+}} xmm12 = xmm8[1,0] ; AVX512VL-NEXT: vshufps {{.*#+}} xmm8 = xmm8[2,2,2,2] ; AVX512VL-NEXT: vmulps %xmm0, %xmm8, %xmm0 -; AVX512VL-NEXT: vmulps %xmm7, %xmm2, %xmm2 +; AVX512VL-NEXT: vmulps %xmm2, %xmm11, %xmm2 ; AVX512VL-NEXT: vaddps %xmm2, %xmm0, %xmm0 ; AVX512VL-NEXT: vextractf32x4 $2, %zmm1, %xmm1 ; AVX512VL-NEXT: vbroadcastss %xmm1, %xmm2 ; AVX512VL-NEXT: vmulps %xmm2, %xmm6, %xmm2 ; AVX512VL-NEXT: vaddps %xmm2, %xmm0, %xmm0 -; AVX512VL-NEXT: vmulss %xmm11, %xmm9, %xmm2 -; AVX512VL-NEXT: vmulss %xmm7, %xmm4, %xmm4 +; AVX512VL-NEXT: vmulss %xmm12, %xmm9, %xmm2 +; AVX512VL-NEXT: vmulss %xmm4, %xmm11, %xmm4 ; AVX512VL-NEXT: vaddss %xmm4, %xmm2, %xmm2 ; AVX512VL-NEXT: vmulss %xmm1, %xmm10, %xmm1 ; AVX512VL-NEXT: vaddss %xmm1, %xmm2, %xmm1 -; AVX512VL-NEXT: vinsertps {{.*#+}} xmm1 = xmm0[0,1],xmm1[0],xmm0[3] -; AVX512VL-NEXT: vinsertf32x4 $1, %xmm5, %zmm3, %zmm2 -; AVX512VL-NEXT: vpmovsxbd {{.*#+}} zmm0 = [0,1,2,4,5,6,16,17,18,0,0,0,0,0,0,0] -; AVX512VL-NEXT: vpermi2ps %zmm1, %zmm2, %zmm0 +; AVX512VL-NEXT: vmovshdup {{.*#+}} xmm2 = xmm5[1,1,3,3] +; AVX512VL-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[2,3] +; AVX512VL-NEXT: vmovlhps {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX512VL-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0,1,2],xmm5[0] +; AVX512VL-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 +; AVX512VL-NEXT: vinsertf32x4 $2, %xmm1, %zmm0, %zmm0 ; AVX512VL-NEXT: retq entry: %block = shufflevector <9 x float> %a0, <9 x float> poison, <2 x i32> diff --git a/llvm/test/CodeGen/X86/vector-constrained-fp-intrinsics.ll b/llvm/test/CodeGen/X86/vector-constrained-fp-intrinsics.ll index 4a5b4277c3cca..88d3ad181d766 100644 --- a/llvm/test/CodeGen/X86/vector-constrained-fp-intrinsics.ll +++ b/llvm/test/CodeGen/X86/vector-constrained-fp-intrinsics.ll @@ -4143,11 +4143,11 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32() #0 { ; CHECK-LABEL: constrained_vector_fptosi_v3i32_v3f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; CHECK-NEXT: movd %eax, %xmm1 -; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; CHECK-NEXT: movd %eax, %xmm0 +; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; CHECK-NEXT: movd %edx, %xmm1 +; CHECK-NEXT: movd %ecx, %xmm0 ; CHECK-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax ; CHECK-NEXT: movd %eax, %xmm1 ; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq @@ -4155,10 +4155,10 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32() #0 { ; AVX-LABEL: constrained_vector_fptosi_v3i32_v3f32: ; AVX: # %bb.0: # %entry ; AVX-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX-NEXT: vmovd %eax, %xmm0 -; AVX-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax +; AVX-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; AVX-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; AVX-NEXT: vmovd %edx, %xmm0 +; AVX-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX-NEXT: retq entry: @@ -4256,11 +4256,11 @@ define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32() #0 { ; AVX1-LABEL: constrained_vector_fptosi_v3i64_v3f32: ; AVX1: # %bb.0: # %entry ; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX1-NEXT: vmovq %rax, %xmm0 -; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX1-NEXT: vmovq %rax, %xmm1 +; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX1-NEXT: vmovq %rdx, %xmm0 +; AVX1-NEXT: vmovq %rcx, %xmm1 ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX1-NEXT: vmovq %rax, %xmm1 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq @@ -4268,11 +4268,11 @@ define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32() #0 { ; AVX512-LABEL: constrained_vector_fptosi_v3i64_v3f32: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm0 -; AVX512-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm1 +; AVX512-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX512-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX512-NEXT: vmovq %rdx, %xmm0 +; AVX512-NEXT: vmovq %rcx, %xmm1 ; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX512-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX512-NEXT: vmovq %rax, %xmm1 ; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq @@ -4382,11 +4382,11 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64() #0 { ; CHECK-LABEL: constrained_vector_fptosi_v3i32_v3f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; CHECK-NEXT: movd %eax, %xmm1 -; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; CHECK-NEXT: movd %eax, %xmm0 +; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; CHECK-NEXT: movd %edx, %xmm1 +; CHECK-NEXT: movd %ecx, %xmm0 ; CHECK-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax ; CHECK-NEXT: movd %eax, %xmm1 ; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq @@ -4394,10 +4394,10 @@ define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64() #0 { ; AVX-LABEL: constrained_vector_fptosi_v3i32_v3f64: ; AVX: # %bb.0: # %entry ; AVX-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX-NEXT: vmovd %eax, %xmm0 -; AVX-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax +; AVX-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; AVX-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; AVX-NEXT: vmovd %edx, %xmm0 +; AVX-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX-NEXT: retq entry: @@ -4498,11 +4498,11 @@ define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64() #0 { ; AVX1-LABEL: constrained_vector_fptosi_v3i64_v3f64: ; AVX1: # %bb.0: # %entry ; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX1-NEXT: vmovq %rax, %xmm0 -; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX1-NEXT: vmovq %rax, %xmm1 +; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX1-NEXT: vmovq %rdx, %xmm0 +; AVX1-NEXT: vmovq %rcx, %xmm1 ; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX1-NEXT: vmovq %rax, %xmm1 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq @@ -4510,11 +4510,11 @@ define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64() #0 { ; AVX512-LABEL: constrained_vector_fptosi_v3i64_v3f64: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm0 -; AVX512-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm1 +; AVX512-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX512-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX512-NEXT: vmovq %rdx, %xmm0 +; AVX512-NEXT: vmovq %rcx, %xmm1 ; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX512-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX512-NEXT: vmovq %rax, %xmm1 ; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq @@ -4645,11 +4645,11 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32() #0 { ; CHECK-LABEL: constrained_vector_fptoui_v3i32_v3f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; CHECK-NEXT: movd %eax, %xmm1 -; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; CHECK-NEXT: movd %eax, %xmm0 +; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; CHECK-NEXT: movd %edx, %xmm1 +; CHECK-NEXT: movd %ecx, %xmm0 ; CHECK-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: cvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; CHECK-NEXT: movd %eax, %xmm1 ; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq @@ -4658,19 +4658,19 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32() #0 { ; AVX1: # %bb.0: # %entry ; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx -; AVX1-NEXT: vmovd %ecx, %xmm0 -; AVX1-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax +; AVX1-NEXT: vcvttss2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX1-NEXT: vmovd %edx, %xmm0 +; AVX1-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX1-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_fptoui_v3i32_v3f32: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX512-NEXT: vmovd %eax, %xmm0 -; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX512-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax +; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; AVX512-NEXT: vmovd %edx, %xmm0 +; AVX512-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX512-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX512-NEXT: retq entry: @@ -4911,7 +4911,7 @@ define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32() #0 { ; ; AVX1-LABEL: constrained_vector_fptoui_v3i64_v3f32: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vmovss {{.*#+}} xmm2 = [4.3E+1,0.0E+0,0.0E+0,0.0E+0] +; AVX1-NEXT: vmovss {{.*#+}} xmm2 = [4.4E+1,0.0E+0,0.0E+0,0.0E+0] ; AVX1-NEXT: vmovss {{.*#+}} xmm0 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0] ; AVX1-NEXT: vcomiss %xmm2, %xmm0 ; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 @@ -4921,51 +4921,51 @@ define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32() #0 { ; AVX1-NEXT: vmovaps %xmm0, %xmm3 ; AVX1-NEXT: .LBB123_2: # %entry ; AVX1-NEXT: vsubss %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vcvttss2si %xmm2, %rax -; AVX1-NEXT: setbe %cl -; AVX1-NEXT: movzbl %cl, %ecx -; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm2 -; AVX1-NEXT: vmovss {{.*#+}} xmm3 = [4.2E+1,0.0E+0,0.0E+0,0.0E+0] -; AVX1-NEXT: vcomiss %xmm3, %xmm0 -; AVX1-NEXT: vxorps %xmm4, %xmm4, %xmm4 +; AVX1-NEXT: vcvttss2si %xmm2, %rcx +; AVX1-NEXT: setbe %al +; AVX1-NEXT: movzbl %al, %eax +; AVX1-NEXT: shlq $63, %rax +; AVX1-NEXT: xorq %rcx, %rax +; AVX1-NEXT: vmovss {{.*#+}} xmm2 = [4.2E+1,0.0E+0,0.0E+0,0.0E+0] +; AVX1-NEXT: vcomiss %xmm2, %xmm0 +; AVX1-NEXT: vxorps %xmm3, %xmm3, %xmm3 ; AVX1-NEXT: ja .LBB123_4 ; AVX1-NEXT: # %bb.3: # %entry -; AVX1-NEXT: vmovaps %xmm0, %xmm4 +; AVX1-NEXT: vmovaps %xmm0, %xmm3 ; AVX1-NEXT: .LBB123_4: # %entry -; AVX1-NEXT: vsubss %xmm4, %xmm3, %xmm3 -; AVX1-NEXT: vcvttss2si %xmm3, %rax +; AVX1-NEXT: vsubss %xmm3, %xmm2, %xmm2 +; AVX1-NEXT: vcvttss2si %xmm2, %rdx ; AVX1-NEXT: setbe %cl ; AVX1-NEXT: movzbl %cl, %ecx ; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm3 -; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0] -; AVX1-NEXT: vmovss {{.*#+}} xmm3 = [4.4E+1,0.0E+0,0.0E+0,0.0E+0] -; AVX1-NEXT: vcomiss %xmm3, %xmm0 +; AVX1-NEXT: xorq %rdx, %rcx +; AVX1-NEXT: vmovss {{.*#+}} xmm2 = [4.3E+1,0.0E+0,0.0E+0,0.0E+0] +; AVX1-NEXT: vcomiss %xmm2, %xmm0 ; AVX1-NEXT: ja .LBB123_6 ; AVX1-NEXT: # %bb.5: # %entry ; AVX1-NEXT: vmovaps %xmm0, %xmm1 ; AVX1-NEXT: .LBB123_6: # %entry -; AVX1-NEXT: vsubss %xmm1, %xmm3, %xmm0 -; AVX1-NEXT: vcvttss2si %xmm0, %rax -; AVX1-NEXT: setbe %cl -; AVX1-NEXT: movzbl %cl, %ecx -; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm0 -; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 +; AVX1-NEXT: vsubss %xmm1, %xmm2, %xmm0 +; AVX1-NEXT: vcvttss2si %xmm0, %rdx +; AVX1-NEXT: setbe %sil +; AVX1-NEXT: movzbl %sil, %esi +; AVX1-NEXT: shlq $63, %rsi +; AVX1-NEXT: xorq %rdx, %rsi +; AVX1-NEXT: vmovq %rsi, %xmm0 +; AVX1-NEXT: vmovq %rcx, %xmm1 +; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] +; AVX1-NEXT: vmovq %rax, %xmm1 +; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_fptoui_v3i64_v3f32: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm0 -; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm1 +; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX512-NEXT: vmovq %rdx, %xmm0 +; AVX512-NEXT: vmovq %rcx, %xmm1 ; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX512-NEXT: vcvttss2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX512-NEXT: vmovq %rax, %xmm1 ; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq @@ -5194,11 +5194,11 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64() #0 { ; CHECK-LABEL: constrained_vector_fptoui_v3i32_v3f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; CHECK-NEXT: movd %eax, %xmm1 -; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; CHECK-NEXT: movd %eax, %xmm0 +; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; CHECK-NEXT: movd %edx, %xmm1 +; CHECK-NEXT: movd %ecx, %xmm0 ; CHECK-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: cvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; CHECK-NEXT: movd %eax, %xmm1 ; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq @@ -5207,19 +5207,19 @@ define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64() #0 { ; AVX1: # %bb.0: # %entry ; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx -; AVX1-NEXT: vmovd %ecx, %xmm0 -; AVX1-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax +; AVX1-NEXT: vcvttsd2si {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX1-NEXT: vmovd %edx, %xmm0 +; AVX1-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX1-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_fptoui_v3i32_v3f64: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX512-NEXT: vmovd %eax, %xmm0 -; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax -; AVX512-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0 -; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %eax +; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ecx +; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %edx +; AVX512-NEXT: vmovd %edx, %xmm0 +; AVX512-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 ; AVX512-NEXT: vpinsrd $2, %eax, %xmm0, %xmm0 ; AVX512-NEXT: retq entry: @@ -5466,7 +5466,7 @@ define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64() #0 { ; ; AVX1-LABEL: constrained_vector_fptoui_v3i64_v3f64: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vmovsd {{.*#+}} xmm2 = [4.2200000000000003E+1,0.0E+0] +; AVX1-NEXT: vmovsd {{.*#+}} xmm2 = [4.2299999999999997E+1,0.0E+0] ; AVX1-NEXT: vmovsd {{.*#+}} xmm0 = [9.2233720368547758E+18,0.0E+0] ; AVX1-NEXT: vcomisd %xmm2, %xmm0 ; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 @@ -5476,51 +5476,51 @@ define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64() #0 { ; AVX1-NEXT: vmovapd %xmm0, %xmm3 ; AVX1-NEXT: .LBB131_2: # %entry ; AVX1-NEXT: vsubsd %xmm3, %xmm2, %xmm2 -; AVX1-NEXT: vcvttsd2si %xmm2, %rax -; AVX1-NEXT: setbe %cl -; AVX1-NEXT: movzbl %cl, %ecx -; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm2 -; AVX1-NEXT: vmovsd {{.*#+}} xmm3 = [4.2100000000000001E+1,0.0E+0] -; AVX1-NEXT: vcomisd %xmm3, %xmm0 -; AVX1-NEXT: vxorpd %xmm4, %xmm4, %xmm4 +; AVX1-NEXT: vcvttsd2si %xmm2, %rcx +; AVX1-NEXT: setbe %al +; AVX1-NEXT: movzbl %al, %eax +; AVX1-NEXT: shlq $63, %rax +; AVX1-NEXT: xorq %rcx, %rax +; AVX1-NEXT: vmovsd {{.*#+}} xmm2 = [4.2100000000000001E+1,0.0E+0] +; AVX1-NEXT: vcomisd %xmm2, %xmm0 +; AVX1-NEXT: vxorpd %xmm3, %xmm3, %xmm3 ; AVX1-NEXT: ja .LBB131_4 ; AVX1-NEXT: # %bb.3: # %entry -; AVX1-NEXT: vmovapd %xmm0, %xmm4 +; AVX1-NEXT: vmovapd %xmm0, %xmm3 ; AVX1-NEXT: .LBB131_4: # %entry -; AVX1-NEXT: vsubsd %xmm4, %xmm3, %xmm3 -; AVX1-NEXT: vcvttsd2si %xmm3, %rax +; AVX1-NEXT: vsubsd %xmm3, %xmm2, %xmm2 +; AVX1-NEXT: vcvttsd2si %xmm2, %rdx ; AVX1-NEXT: setbe %cl ; AVX1-NEXT: movzbl %cl, %ecx ; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm3 -; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0] -; AVX1-NEXT: vmovsd {{.*#+}} xmm3 = [4.2299999999999997E+1,0.0E+0] -; AVX1-NEXT: vcomisd %xmm3, %xmm0 +; AVX1-NEXT: xorq %rdx, %rcx +; AVX1-NEXT: vmovsd {{.*#+}} xmm2 = [4.2200000000000003E+1,0.0E+0] +; AVX1-NEXT: vcomisd %xmm2, %xmm0 ; AVX1-NEXT: ja .LBB131_6 ; AVX1-NEXT: # %bb.5: # %entry ; AVX1-NEXT: vmovapd %xmm0, %xmm1 ; AVX1-NEXT: .LBB131_6: # %entry -; AVX1-NEXT: vsubsd %xmm1, %xmm3, %xmm0 -; AVX1-NEXT: vcvttsd2si %xmm0, %rax -; AVX1-NEXT: setbe %cl -; AVX1-NEXT: movzbl %cl, %ecx -; AVX1-NEXT: shlq $63, %rcx -; AVX1-NEXT: xorq %rax, %rcx -; AVX1-NEXT: vmovq %rcx, %xmm0 -; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 +; AVX1-NEXT: vsubsd %xmm1, %xmm2, %xmm0 +; AVX1-NEXT: vcvttsd2si %xmm0, %rdx +; AVX1-NEXT: setbe %sil +; AVX1-NEXT: movzbl %sil, %esi +; AVX1-NEXT: shlq $63, %rsi +; AVX1-NEXT: xorq %rdx, %rsi +; AVX1-NEXT: vmovq %rsi, %xmm0 +; AVX1-NEXT: vmovq %rcx, %xmm1 +; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] +; AVX1-NEXT: vmovq %rax, %xmm1 +; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_fptoui_v3i64_v3f64: ; AVX512: # %bb.0: # %entry ; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm0 -; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax -; AVX512-NEXT: vmovq %rax, %xmm1 +; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rcx +; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rdx +; AVX512-NEXT: vmovq %rdx, %xmm0 +; AVX512-NEXT: vmovq %rcx, %xmm1 ; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX512-NEXT: vcvttsd2usi {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %rax ; AVX512-NEXT: vmovq %rax, %xmm1 ; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq @@ -5731,26 +5731,26 @@ entry: define <3 x float> @constrained_vector_fptrunc_v3f64() #0 { ; CHECK-LABEL: constrained_vector_fptrunc_v3f64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: movsd {{.*#+}} xmm0 = [4.2200000000000003E+1,0.0E+0] +; CHECK-NEXT: movsd {{.*#+}} xmm0 = [4.2299999999999997E+1,0.0E+0] ; CHECK-NEXT: cvtsd2ss %xmm0, %xmm1 ; CHECK-NEXT: movsd {{.*#+}} xmm0 = [4.2100000000000001E+1,0.0E+0] ; CHECK-NEXT: cvtsd2ss %xmm0, %xmm0 -; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: movsd {{.*#+}} xmm1 = [4.2299999999999997E+1,0.0E+0] -; CHECK-NEXT: cvtsd2ss %xmm1, %xmm1 +; CHECK-NEXT: movsd {{.*#+}} xmm2 = [4.2200000000000003E+1,0.0E+0] +; CHECK-NEXT: cvtsd2ss %xmm2, %xmm2 +; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] ; CHECK-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq ; ; AVX-LABEL: constrained_vector_fptrunc_v3f64: ; AVX: # %bb.0: # %entry -; AVX-NEXT: vmovsd {{.*#+}} xmm0 = [4.2200000000000003E+1,0.0E+0] +; AVX-NEXT: vmovsd {{.*#+}} xmm0 = [4.2299999999999997E+1,0.0E+0] ; AVX-NEXT: vcvtsd2ss %xmm0, %xmm0, %xmm0 ; AVX-NEXT: vmovsd {{.*#+}} xmm1 = [4.2100000000000001E+1,0.0E+0] ; AVX-NEXT: vcvtsd2ss %xmm1, %xmm1, %xmm1 -; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[2,3] -; AVX-NEXT: vmovsd {{.*#+}} xmm1 = [4.2299999999999997E+1,0.0E+0] -; AVX-NEXT: vcvtsd2ss %xmm1, %xmm1, %xmm1 -; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] +; AVX-NEXT: vmovsd {{.*#+}} xmm2 = [4.2200000000000003E+1,0.0E+0] +; AVX-NEXT: vcvtsd2ss %xmm2, %xmm2, %xmm2 +; AVX-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[2,3] +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] ; AVX-NEXT: retq entry: %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64( @@ -5834,14 +5834,14 @@ define <3 x double> @constrained_vector_fpext_v3f32() #0 { ; ; AVX-LABEL: constrained_vector_fpext_v3f32: ; AVX: # %bb.0: # %entry -; AVX-NEXT: vmovss {{.*#+}} xmm0 = [4.3E+1,0.0E+0,0.0E+0,0.0E+0] +; AVX-NEXT: vmovss {{.*#+}} xmm0 = [4.4E+1,0.0E+0,0.0E+0,0.0E+0] ; AVX-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0 ; AVX-NEXT: vmovss {{.*#+}} xmm1 = [4.2E+1,0.0E+0,0.0E+0,0.0E+0] ; AVX-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 -; AVX-NEXT: vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0] -; AVX-NEXT: vmovss {{.*#+}} xmm1 = [4.4E+1,0.0E+0,0.0E+0,0.0E+0] -; AVX-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1 -; AVX-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 +; AVX-NEXT: vmovss {{.*#+}} xmm2 = [4.3E+1,0.0E+0,0.0E+0,0.0E+0] +; AVX-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2 +; AVX-NEXT: vmovlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0] +; AVX-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 ; AVX-NEXT: retq entry: %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32( @@ -6702,14 +6702,14 @@ define <3 x double> @constrained_vector_sitofp_v3f64_v3i32(<3 x i32> %x) #0 { ; ; AVX-LABEL: constrained_vector_sitofp_v3f64_v3i32: ; AVX: # %bb.0: # %entry -; AVX-NEXT: vextractps $1, %xmm0, %eax +; AVX-NEXT: vextractps $2, %xmm0, %eax ; AVX-NEXT: vcvtsi2sd %eax, %xmm15, %xmm1 ; AVX-NEXT: vmovd %xmm0, %eax ; AVX-NEXT: vcvtsi2sd %eax, %xmm15, %xmm2 -; AVX-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX-NEXT: vpextrd $2, %xmm0, %eax +; AVX-NEXT: vpextrd $1, %xmm0, %eax ; AVX-NEXT: vcvtsi2sd %eax, %xmm15, %xmm0 -; AVX-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX-NEXT: retq entry: %result = call <3 x double> @@ -6722,31 +6722,31 @@ entry: define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; CHECK-LABEL: constrained_vector_sitofp_v3f32_v3i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: movd %xmm0, %eax +; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3] +; CHECK-NEXT: movd %xmm1, %eax +; CHECK-NEXT: xorps %xmm1, %xmm1 ; CHECK-NEXT: cvtsi2ss %eax, %xmm1 ; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,1,1] ; CHECK-NEXT: movd %xmm2, %eax ; CHECK-NEXT: xorps %xmm2, %xmm2 ; CHECK-NEXT: cvtsi2ss %eax, %xmm2 -; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] -; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3] ; CHECK-NEXT: movd %xmm0, %eax ; CHECK-NEXT: xorps %xmm0, %xmm0 ; CHECK-NEXT: cvtsi2ss %eax, %xmm0 -; CHECK-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] -; CHECK-NEXT: movaps %xmm1, %xmm0 +; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] +; CHECK-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq ; ; AVX-LABEL: constrained_vector_sitofp_v3f32_v3i32: ; AVX: # %bb.0: # %entry -; AVX-NEXT: vextractps $1, %xmm0, %eax +; AVX-NEXT: vextractps $2, %xmm0, %eax ; AVX-NEXT: vcvtsi2ss %eax, %xmm15, %xmm1 ; AVX-NEXT: vmovd %xmm0, %eax ; AVX-NEXT: vcvtsi2ss %eax, %xmm15, %xmm2 -; AVX-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX-NEXT: vpextrd $2, %xmm0, %eax +; AVX-NEXT: vpextrd $1, %xmm0, %eax ; AVX-NEXT: vcvtsi2ss %eax, %xmm15, %xmm0 -; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX-NEXT: retq entry: %result = call <3 x float> @@ -6769,28 +6769,28 @@ define <3 x double> @constrained_vector_sitofp_v3f64_v3i64(<3 x i64> %x) #0 { ; ; AVX1-LABEL: constrained_vector_sitofp_v3f64_v3i64: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vpextrq $1, %xmm0, %rax +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 +; AVX1-NEXT: vmovq %xmm1, %rax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm1 ; AVX1-NEXT: vmovq %xmm0, %rax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm2 -; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 -; AVX1-NEXT: vmovq %xmm0, %rax +; AVX1-NEXT: vpextrq $1, %xmm0, %rax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm0 -; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_sitofp_v3f64_v3i64: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vpextrq $1, %xmm0, %rax +; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1 +; AVX512-NEXT: vmovq %xmm1, %rax ; AVX512-NEXT: vcvtsi2sd %rax, %xmm15, %xmm1 ; AVX512-NEXT: vmovq %xmm0, %rax ; AVX512-NEXT: vcvtsi2sd %rax, %xmm15, %xmm2 -; AVX512-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0 -; AVX512-NEXT: vmovq %xmm0, %rax +; AVX512-NEXT: vpextrq $1, %xmm0, %rax ; AVX512-NEXT: vcvtsi2sd %rax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX512-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq entry: %result = call <3 x double> @@ -6803,39 +6803,38 @@ entry: define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; CHECK-LABEL: constrained_vector_sitofp_v3f32_v3i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: cvtsi2ss %rsi, %xmm1 -; CHECK-NEXT: cvtsi2ss %rdi, %xmm0 -; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: xorps %xmm1, %xmm1 ; CHECK-NEXT: cvtsi2ss %rdx, %xmm1 +; CHECK-NEXT: cvtsi2ss %rdi, %xmm0 +; CHECK-NEXT: cvtsi2ss %rsi, %xmm2 +; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] ; CHECK-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq ; ; AVX1-LABEL: constrained_vector_sitofp_v3f32_v3i64: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vpextrq $1, %xmm0, %rax +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 +; AVX1-NEXT: vmovq %xmm1, %rax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm1 ; AVX1-NEXT: vmovq %xmm0, %rax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm2 -; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 -; AVX1-NEXT: vmovq %xmm0, %rax +; AVX1-NEXT: vpextrq $1, %xmm0, %rax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm0 -; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_sitofp_v3f32_v3i64: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vpextrq $1, %xmm0, %rax +; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1 +; AVX512-NEXT: vmovq %xmm1, %rax ; AVX512-NEXT: vcvtsi2ss %rax, %xmm15, %xmm1 ; AVX512-NEXT: vmovq %xmm0, %rax ; AVX512-NEXT: vcvtsi2ss %rax, %xmm15, %xmm2 -; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0 -; AVX512-NEXT: vmovq %xmm0, %rax +; AVX512-NEXT: vpextrq $1, %xmm0, %rax ; AVX512-NEXT: vcvtsi2ss %rax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX512-NEXT: vzeroupper ; AVX512-NEXT: retq entry: @@ -7415,26 +7414,26 @@ define <3 x double> @constrained_vector_uitofp_v3f64_v3i32(<3 x i32> %x) #0 { ; ; AVX1-LABEL: constrained_vector_uitofp_v3f64_v3i32: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vextractps $1, %xmm0, %eax +; AVX1-NEXT: vextractps $2, %xmm0, %eax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm1 ; AVX1-NEXT: vmovd %xmm0, %eax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm2 -; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX1-NEXT: vpextrd $2, %xmm0, %eax +; AVX1-NEXT: vpextrd $1, %xmm0, %eax ; AVX1-NEXT: vcvtsi2sd %rax, %xmm15, %xmm0 -; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_uitofp_v3f64_v3i32: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vextractps $1, %xmm0, %eax +; AVX512-NEXT: vextractps $2, %xmm0, %eax ; AVX512-NEXT: vcvtusi2sd %eax, %xmm15, %xmm1 ; AVX512-NEXT: vmovd %xmm0, %eax ; AVX512-NEXT: vcvtusi2sd %eax, %xmm15, %xmm2 -; AVX512-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX512-NEXT: vpextrd $2, %xmm0, %eax +; AVX512-NEXT: vpextrd $1, %xmm0, %eax ; AVX512-NEXT: vcvtusi2sd %eax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX512-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq entry: %result = call <3 x double> @@ -7447,43 +7446,43 @@ entry: define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 { ; CHECK-LABEL: constrained_vector_uitofp_v3f32_v3i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: movd %xmm0, %eax +; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3] +; CHECK-NEXT: movd %xmm1, %eax +; CHECK-NEXT: xorps %xmm1, %xmm1 ; CHECK-NEXT: cvtsi2ss %rax, %xmm1 ; CHECK-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,1,1] ; CHECK-NEXT: movd %xmm2, %eax ; CHECK-NEXT: xorps %xmm2, %xmm2 ; CHECK-NEXT: cvtsi2ss %rax, %xmm2 -; CHECK-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] -; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3] ; CHECK-NEXT: movd %xmm0, %eax ; CHECK-NEXT: xorps %xmm0, %xmm0 ; CHECK-NEXT: cvtsi2ss %rax, %xmm0 -; CHECK-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] -; CHECK-NEXT: movaps %xmm1, %xmm0 +; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] +; CHECK-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq ; ; AVX1-LABEL: constrained_vector_uitofp_v3f32_v3i32: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vextractps $1, %xmm0, %eax +; AVX1-NEXT: vextractps $2, %xmm0, %eax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm1 ; AVX1-NEXT: vmovd %xmm0, %eax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm2 -; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX1-NEXT: vpextrd $2, %xmm0, %eax +; AVX1-NEXT: vpextrd $1, %xmm0, %eax ; AVX1-NEXT: vcvtsi2ss %rax, %xmm15, %xmm0 -; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_uitofp_v3f32_v3i32: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vextractps $1, %xmm0, %eax +; AVX512-NEXT: vextractps $2, %xmm0, %eax ; AVX512-NEXT: vcvtusi2ss %eax, %xmm15, %xmm1 ; AVX512-NEXT: vmovd %xmm0, %eax ; AVX512-NEXT: vcvtusi2ss %eax, %xmm15, %xmm2 -; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX512-NEXT: vpextrd $2, %xmm0, %eax +; AVX512-NEXT: vpextrd $1, %xmm0, %eax ; AVX512-NEXT: vcvtusi2ss %eax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX512-NEXT: retq entry: %result = call <3 x float> @@ -7539,7 +7538,8 @@ define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 { ; ; AVX1-LABEL: constrained_vector_uitofp_v3f64_v3i64: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vpextrq $1, %xmm0, %rax +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 +; AVX1-NEXT: vmovq %xmm1, %rax ; AVX1-NEXT: movq %rax, %rcx ; AVX1-NEXT: shrq %rcx ; AVX1-NEXT: movl %eax, %edx @@ -7565,9 +7565,7 @@ define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 { ; AVX1-NEXT: # %bb.3: ; AVX1-NEXT: vaddsd %xmm2, %xmm2, %xmm2 ; AVX1-NEXT: .LBB183_4: # %entry -; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 -; AVX1-NEXT: vmovq %xmm0, %rax +; AVX1-NEXT: vpextrq $1, %xmm0, %rax ; AVX1-NEXT: movq %rax, %rcx ; AVX1-NEXT: shrq %rcx ; AVX1-NEXT: movl %eax, %edx @@ -7580,20 +7578,21 @@ define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 { ; AVX1-NEXT: # %bb.5: ; AVX1-NEXT: vaddsd %xmm0, %xmm0, %xmm0 ; AVX1-NEXT: .LBB183_6: # %entry -; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_uitofp_v3f64_v3i64: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vpextrq $1, %xmm0, %rax +; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1 +; AVX512-NEXT: vmovq %xmm1, %rax ; AVX512-NEXT: vcvtusi2sd %rax, %xmm15, %xmm1 ; AVX512-NEXT: vmovq %xmm0, %rax ; AVX512-NEXT: vcvtusi2sd %rax, %xmm15, %xmm2 -; AVX512-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm2[0],xmm1[0] -; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0 -; AVX512-NEXT: vmovq %xmm0, %rax +; AVX512-NEXT: vpextrq $1, %xmm0, %rax ; AVX512-NEXT: vcvtusi2sd %rax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 +; AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm2[0],xmm0[0] +; AVX512-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX512-NEXT: retq entry: %result = call <3 x double> @@ -7606,13 +7605,13 @@ entry: define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; CHECK-LABEL: constrained_vector_uitofp_v3f32_v3i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: movq %rsi, %rax +; CHECK-NEXT: movq %rdx, %rax ; CHECK-NEXT: shrq %rax -; CHECK-NEXT: movl %esi, %ecx +; CHECK-NEXT: movl %edx, %ecx ; CHECK-NEXT: andl $1, %ecx ; CHECK-NEXT: orq %rax, %rcx -; CHECK-NEXT: testq %rsi, %rsi -; CHECK-NEXT: cmovnsq %rsi, %rcx +; CHECK-NEXT: testq %rdx, %rdx +; CHECK-NEXT: cmovnsq %rdx, %rcx ; CHECK-NEXT: cvtsi2ss %rcx, %xmm1 ; CHECK-NEXT: jns .LBB184_2 ; CHECK-NEXT: # %bb.1: @@ -7630,26 +7629,26 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; CHECK-NEXT: # %bb.3: ; CHECK-NEXT: addss %xmm0, %xmm0 ; CHECK-NEXT: .LBB184_4: # %entry -; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] -; CHECK-NEXT: movq %rdx, %rax +; CHECK-NEXT: movq %rsi, %rax ; CHECK-NEXT: shrq %rax -; CHECK-NEXT: movl %edx, %ecx +; CHECK-NEXT: movl %esi, %ecx ; CHECK-NEXT: andl $1, %ecx ; CHECK-NEXT: orq %rax, %rcx -; CHECK-NEXT: testq %rdx, %rdx -; CHECK-NEXT: cmovnsq %rdx, %rcx -; CHECK-NEXT: xorps %xmm1, %xmm1 -; CHECK-NEXT: cvtsi2ss %rcx, %xmm1 +; CHECK-NEXT: testq %rsi, %rsi +; CHECK-NEXT: cmovnsq %rsi, %rcx +; CHECK-NEXT: cvtsi2ss %rcx, %xmm2 ; CHECK-NEXT: jns .LBB184_6 ; CHECK-NEXT: # %bb.5: -; CHECK-NEXT: addss %xmm1, %xmm1 +; CHECK-NEXT: addss %xmm2, %xmm2 ; CHECK-NEXT: .LBB184_6: # %entry +; CHECK-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] ; CHECK-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] ; CHECK-NEXT: retq ; ; AVX1-LABEL: constrained_vector_uitofp_v3f32_v3i64: ; AVX1: # %bb.0: # %entry -; AVX1-NEXT: vpextrq $1, %xmm0, %rax +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 +; AVX1-NEXT: vmovq %xmm1, %rax ; AVX1-NEXT: movq %rax, %rcx ; AVX1-NEXT: shrq %rcx ; AVX1-NEXT: movl %eax, %edx @@ -7675,9 +7674,7 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; AVX1-NEXT: # %bb.3: ; AVX1-NEXT: vaddss %xmm2, %xmm2, %xmm2 ; AVX1-NEXT: .LBB184_4: # %entry -; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 -; AVX1-NEXT: vmovq %xmm0, %rax +; AVX1-NEXT: vpextrq $1, %xmm0, %rax ; AVX1-NEXT: movq %rax, %rcx ; AVX1-NEXT: shrq %rcx ; AVX1-NEXT: movl %eax, %edx @@ -7690,21 +7687,22 @@ define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 { ; AVX1-NEXT: # %bb.5: ; AVX1-NEXT: vaddss %xmm0, %xmm0, %xmm0 ; AVX1-NEXT: .LBB184_6: # %entry -; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq ; ; AVX512-LABEL: constrained_vector_uitofp_v3f32_v3i64: ; AVX512: # %bb.0: # %entry -; AVX512-NEXT: vpextrq $1, %xmm0, %rax +; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm1 +; AVX512-NEXT: vmovq %xmm1, %rax ; AVX512-NEXT: vcvtusi2ss %rax, %xmm15, %xmm1 ; AVX512-NEXT: vmovq %xmm0, %rax ; AVX512-NEXT: vcvtusi2ss %rax, %xmm15, %xmm2 -; AVX512-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0],xmm1[0],xmm2[2,3] -; AVX512-NEXT: vextracti128 $1, %ymm0, %xmm0 -; AVX512-NEXT: vmovq %xmm0, %rax +; AVX512-NEXT: vpextrq $1, %xmm0, %rax ; AVX512-NEXT: vcvtusi2ss %rax, %xmm15, %xmm0 -; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm1[0,1],xmm0[0],xmm1[3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm2[0],xmm0[0],xmm2[2,3] +; AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0],xmm0[3] ; AVX512-NEXT: vzeroupper ; AVX512-NEXT: retq entry: From eea62159e853b59a4e4e69da22175222ccd8c663 Mon Sep 17 00:00:00 2001 From: Joseph Huber Date: Wed, 19 Nov 2025 15:56:25 -0600 Subject: [PATCH 31/48] [Offload] Make the RPC thread sleep briefly when idle (#168596) Summary: We start this thread if the RPC client symbol is detected in the loaded binary. We should make this sleep if there's no work to avoid the thread running at high priority when the (scarecely used) RPC call is actually required. So, right now after 25 microseconds we will assume the server is inactive and begin sleeping. This resets once we do find work. AMD supports a more intelligent way to do this. HSA signals can wake a sleeping thread from the kernel, and signals can be sent from the GPU side. This would be nice to have and I'm planning on working with it in the future to make this infrastructure more usable with existing AMD workloads. --- offload/plugins-nextgen/common/src/RPC.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/offload/plugins-nextgen/common/src/RPC.cpp b/offload/plugins-nextgen/common/src/RPC.cpp index e19f2ef94de6e..8d6704733970d 100644 --- a/offload/plugins-nextgen/common/src/RPC.cpp +++ b/offload/plugins-nextgen/common/src/RPC.cpp @@ -83,7 +83,8 @@ static rpc::Status handleOffloadOpcodes(plugin::GenericDeviceTy &Device, return rpc::RPC_ERROR; } -static rpc::Status runServer(plugin::GenericDeviceTy &Device, void *Buffer) { +static rpc::Status runServer(plugin::GenericDeviceTy &Device, void *Buffer, + bool &ClientInUse) { uint64_t NumPorts = std::min(Device.requestedRPCPortCount(), rpc::MAX_PORT_COUNT); rpc::Server Server(NumPorts, Buffer); @@ -92,6 +93,7 @@ static rpc::Status runServer(plugin::GenericDeviceTy &Device, void *Buffer) { if (!Port) return rpc::RPC_SUCCESS; + ClientInUse = true; rpc::Status Status = handleOffloadOpcodes(Device, *Port, Device.getWarpSize()); @@ -99,7 +101,6 @@ static rpc::Status runServer(plugin::GenericDeviceTy &Device, void *Buffer) { if (Status == rpc::RPC_UNHANDLED_OPCODE) Status = LIBC_NAMESPACE::shared::handle_libc_opcodes(*Port, Device.getWarpSize()); - Port->close(); return Status; @@ -122,7 +123,11 @@ void RPCServerTy::ServerThread::shutDown() { } void RPCServerTy::ServerThread::run() { + static constexpr auto IdleTime = std::chrono::microseconds(25); + static constexpr auto IdleSleep = std::chrono::microseconds(250); std::unique_lock Lock(Mutex); + + auto LastUse = std::chrono::steady_clock::now(); for (;;) { CV.wait(Lock, [&]() { return NumUsers.load(std::memory_order_acquire) > 0 || @@ -133,15 +138,25 @@ void RPCServerTy::ServerThread::run() { return; Lock.unlock(); + bool ClientInUse = false; while (NumUsers.load(std::memory_order_relaxed) > 0 && Running.load(std::memory_order_relaxed)) { + + // Suspend this thread briefly if there is no current work. + auto Now = std::chrono::steady_clock::now(); + if (!ClientInUse && Now - LastUse >= IdleTime) + std::this_thread::sleep_for(IdleSleep); + else if (ClientInUse) + LastUse = Now; + + ClientInUse = false; std::lock_guard Lock(BufferMutex); for (const auto &[Buffer, Device] : llvm::zip_equal(Buffers, Devices)) { if (!Buffer || !Device) continue; // If running the server failed, print a message but keep running. - if (runServer(*Device, Buffer) != rpc::RPC_SUCCESS) + if (runServer(*Device, Buffer, ClientInUse) != rpc::RPC_SUCCESS) FAILURE_MESSAGE("Unhandled or invalid RPC opcode!"); } } From 5c43385319c3976edf6857487273af22eac3abae Mon Sep 17 00:00:00 2001 From: Andres-Salamanca Date: Wed, 19 Nov 2025 17:08:23 -0500 Subject: [PATCH 32/48] [CIR] Upstream CIR await op (#168133) This PR upstreams `cir.await` and adds initial codegen for emitting a skeleton of the ready, suspend, and resume branches. Codegen for these branches is left for a future PR. It also adds a test for the invalid case where a `cir.func` is marked as a coroutine but does not contain a `cir.await` op in its body. --- clang/include/clang/CIR/Dialect/IR/CIROps.td | 98 +++++++++++++++- clang/lib/CIR/CodeGen/CIRGenCoroutine.cpp | 111 ++++++++++++++++++ clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp | 4 + clang/lib/CIR/CodeGen/CIRGenFunction.h | 3 + clang/lib/CIR/CodeGen/CIRGenValue.h | 1 + clang/lib/CIR/Dialect/IR/CIRDialect.cpp | 76 +++++++++++- .../CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 6 + clang/lib/CodeGen/CGValue.h | 1 + clang/test/CIR/CodeGen/coro-task.cpp | 39 ++++++ clang/test/CIR/IR/await.cir | 21 ++++ clang/test/CIR/IR/func.cir | 9 ++ clang/test/CIR/IR/invalid-await.cir | 19 +++ 12 files changed, 383 insertions(+), 5 deletions(-) create mode 100644 clang/test/CIR/IR/await.cir create mode 100644 clang/test/CIR/IR/invalid-await.cir diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td index 06e0796959c8f..92300ef5b152c 100644 --- a/clang/include/clang/CIR/Dialect/IR/CIROps.td +++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td @@ -802,8 +802,8 @@ def CIR_ConditionOp : CIR_Op<"condition", [ //===----------------------------------------------------------------------===// defvar CIR_YieldableScopes = [ - "ArrayCtor", "ArrayDtor", "CaseOp", "DoWhileOp", "ForOp", "GlobalOp", "IfOp", - "ScopeOp", "SwitchOp", "TernaryOp", "WhileOp", "TryOp" + "ArrayCtor", "ArrayDtor", "AwaitOp", "CaseOp", "DoWhileOp", "ForOp", + "GlobalOp", "IfOp", "ScopeOp", "SwitchOp", "TernaryOp", "WhileOp", "TryOp" ]; def CIR_YieldOp : CIR_Op<"yield", [ @@ -2752,6 +2752,100 @@ def CIR_CallOp : CIR_CallOpBase<"call", [NoRegionArguments]> { ]; } +//===----------------------------------------------------------------------===// +// AwaitOp +//===----------------------------------------------------------------------===// + +def CIR_AwaitKind : CIR_I32EnumAttr<"AwaitKind", "await kind", [ + I32EnumAttrCase<"Init", 0, "init">, + I32EnumAttrCase<"User", 1, "user">, + I32EnumAttrCase<"Yield", 2, "yield">, + I32EnumAttrCase<"Final", 3, "final"> +]>; + +def CIR_AwaitOp : CIR_Op<"await",[ + DeclareOpInterfaceMethods, + RecursivelySpeculatable, NoRegionArguments +]> { + let summary = "Wraps C++ co_await implicit logic"; + let description = [{ + The under the hood effect of using C++ `co_await expr` roughly + translates to: + + ```c++ + // co_await expr; + + auto &&x = CommonExpr(); + if (!x.await_ready()) { + ... + x.await_suspend(...); + ... + } + x.await_resume(); + ``` + + `cir.await` represents this logic by using 3 regions: + - ready: covers veto power from x.await_ready() + - suspend: wraps actual x.await_suspend() logic + - resume: handles x.await_resume() + + Breaking this up in regions allows individual scrutiny of conditions + which might lead to folding some of them out. Lowerings coming out + of CIR, e.g. LLVM, should use the `suspend` region to track more + lower level codegen (e.g. intrinsic emission for coro.save/coro.suspend). + + There are also 4 flavors of `cir.await` available: + - `init`: compiler generated initial suspend via implicit `co_await`. + - `user`: also known as normal, representing a user written `co_await`. + - `yield`: user written `co_yield` expressions. + - `final`: compiler generated final suspend via implicit `co_await`. + + ```mlir + cir.scope { + ... // auto &&x = CommonExpr(); + cir.await(user, ready : { + ... // x.await_ready() + }, suspend : { + ... // x.await_suspend() + }, resume : { + ... // x.await_resume() + }) + } + ``` + + Note that resulution of the common expression is assumed to happen + as part of the enclosing await scope. + }]; + + let arguments = (ins CIR_AwaitKind:$kind); + let regions = (region SizedRegion<1>:$ready, + SizedRegion<1>:$suspend, + SizedRegion<1>:$resume); + let assemblyFormat = [{ + `(` $kind `,` + `ready` `:` $ready `,` + `suspend` `:` $suspend `,` + `resume` `:` $resume `,` + `)` + attr-dict + }]; + + let skipDefaultBuilders = 1; + let builders = [ + OpBuilder<(ins + "cir::AwaitKind":$kind, + CArg<"BuilderCallbackRef", + "nullptr">:$readyBuilder, + CArg<"BuilderCallbackRef", + "nullptr">:$suspendBuilder, + CArg<"BuilderCallbackRef", + "nullptr">:$resumeBuilder + )> + ]; + + let hasVerifier = 1; +} + //===----------------------------------------------------------------------===// // CopyOp //===----------------------------------------------------------------------===// diff --git a/clang/lib/CIR/CodeGen/CIRGenCoroutine.cpp b/clang/lib/CIR/CodeGen/CIRGenCoroutine.cpp index 05fb1aedcbf4a..bb55991d9366a 100644 --- a/clang/lib/CIR/CodeGen/CIRGenCoroutine.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenCoroutine.cpp @@ -22,6 +22,10 @@ using namespace clang; using namespace clang::CIRGen; struct clang::CIRGen::CGCoroData { + // What is the current await expression kind and how many + // await/yield expressions were encountered so far. + // These are used to generate pretty labels for await expressions in LLVM IR. + cir::AwaitKind currentAwaitKind = cir::AwaitKind::Init; // Stores the __builtin_coro_id emitted in the function so that we can supply // it as the first argument to other builtins. cir::CallOp coroId = nullptr; @@ -249,7 +253,114 @@ CIRGenFunction::emitCoroutineBody(const CoroutineBodyStmt &s) { emitAnyExprToMem(s.getReturnValue(), returnValue, s.getReturnValue()->getType().getQualifiers(), /*isInit*/ true); + + assert(!cir::MissingFeatures::ehCleanupScope()); + // FIXME(cir): EHStack.pushCleanup(EHCleanup); + curCoro.data->currentAwaitKind = cir::AwaitKind::Init; + if (emitStmt(s.getInitSuspendStmt(), /*useCurrentScope=*/true).failed()) + return mlir::failure(); assert(!cir::MissingFeatures::emitBodyAndFallthrough()); } return mlir::success(); } +// Given a suspend expression which roughly looks like: +// +// auto && x = CommonExpr(); +// if (!x.await_ready()) { +// x.await_suspend(...); (*) +// } +// x.await_resume(); +// +// where the result of the entire expression is the result of x.await_resume() +// +// (*) If x.await_suspend return type is bool, it allows to veto a suspend: +// if (x.await_suspend(...)) +// llvm_coro_suspend(); +// +// This is more higher level than LLVM codegen, for that one see llvm's +// docs/Coroutines.rst for more details. +namespace { +struct LValueOrRValue { + LValue lv; + RValue rv; +}; +} // namespace + +static LValueOrRValue +emitSuspendExpression(CIRGenFunction &cgf, CGCoroData &coro, + CoroutineSuspendExpr const &s, cir::AwaitKind kind, + AggValueSlot aggSlot, bool ignoreResult, + mlir::Block *scopeParentBlock, + mlir::Value &tmpResumeRValAddr, bool forLValue) { + mlir::LogicalResult awaitBuild = mlir::success(); + LValueOrRValue awaitRes; + + CIRGenFunction::OpaqueValueMapping binder = + CIRGenFunction::OpaqueValueMapping(cgf, s.getOpaqueValue()); + CIRGenBuilderTy &builder = cgf.getBuilder(); + [[maybe_unused]] cir::AwaitOp awaitOp = cir::AwaitOp::create( + builder, cgf.getLoc(s.getSourceRange()), kind, + /*readyBuilder=*/ + [&](mlir::OpBuilder &b, mlir::Location loc) { + builder.createCondition( + cgf.createDummyValue(loc, cgf.getContext().BoolTy)); + }, + /*suspendBuilder=*/ + [&](mlir::OpBuilder &b, mlir::Location loc) { + cir::YieldOp::create(builder, loc); + }, + /*resumeBuilder=*/ + [&](mlir::OpBuilder &b, mlir::Location loc) { + cir::YieldOp::create(builder, loc); + }); + + assert(awaitBuild.succeeded() && "Should know how to codegen"); + return awaitRes; +} + +static RValue emitSuspendExpr(CIRGenFunction &cgf, + const CoroutineSuspendExpr &e, + cir::AwaitKind kind, AggValueSlot aggSlot, + bool ignoreResult) { + RValue rval; + mlir::Location scopeLoc = cgf.getLoc(e.getSourceRange()); + + // Since we model suspend / resume as an inner region, we must store + // resume scalar results in a tmp alloca, and load it after we build the + // suspend expression. An alternative way to do this would be to make + // every region return a value when promise.return_value() is used, but + // it's a bit awkward given that resume is the only region that actually + // returns a value. + mlir::Block *currEntryBlock = cgf.curLexScope->getEntryBlock(); + [[maybe_unused]] mlir::Value tmpResumeRValAddr; + + // No need to explicitly wrap this into a scope since the AST already uses a + // ExprWithCleanups, which will wrap this into a cir.scope anyways. + rval = emitSuspendExpression(cgf, *cgf.curCoro.data, e, kind, aggSlot, + ignoreResult, currEntryBlock, tmpResumeRValAddr, + /*forLValue*/ false) + .rv; + + if (ignoreResult || rval.isIgnored()) + return rval; + + if (rval.isScalar()) { + rval = RValue::get(cir::LoadOp::create(cgf.getBuilder(), scopeLoc, + rval.getValue().getType(), + tmpResumeRValAddr)); + } else if (rval.isAggregate()) { + // This is probably already handled via AggSlot, remove this assertion + // once we have a testcase and prove all pieces work. + cgf.cgm.errorNYI("emitSuspendExpr Aggregate"); + } else { // complex + cgf.cgm.errorNYI("emitSuspendExpr Complex"); + } + return rval; +} + +RValue CIRGenFunction::emitCoawaitExpr(const CoawaitExpr &e, + AggValueSlot aggSlot, + bool ignoreResult) { + return emitSuspendExpr(*this, e, curCoro.data->currentAwaitKind, aggSlot, + ignoreResult); +} diff --git a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp index 90d661782b929..7c94743d5ffc6 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp @@ -156,6 +156,10 @@ class ScalarExprEmitter : public StmtVisitor { return cgf.emitLoadOfLValue(lv, e->getExprLoc()).getValue(); } + mlir::Value VisitCoawaitExpr(CoawaitExpr *s) { + return cgf.emitCoawaitExpr(*s).getValue(); + } + mlir::Value emitLoadOfLValue(LValue lv, SourceLocation loc) { return cgf.emitLoadOfLValue(lv, loc).getValue(); } diff --git a/clang/lib/CIR/CodeGen/CIRGenFunction.h b/clang/lib/CIR/CodeGen/CIRGenFunction.h index b22bf2d87fc10..b426f3389ff1b 100644 --- a/clang/lib/CIR/CodeGen/CIRGenFunction.h +++ b/clang/lib/CIR/CodeGen/CIRGenFunction.h @@ -1576,6 +1576,9 @@ class CIRGenFunction : public CIRGenTypeCache { void emitForwardingCallToLambda(const CXXMethodDecl *lambdaCallOperator, CallArgList &callArgs); + RValue emitCoawaitExpr(const CoawaitExpr &e, + AggValueSlot aggSlot = AggValueSlot::ignored(), + bool ignoreResult = false); /// Emit the computation of the specified expression of complex type, /// returning the result. mlir::Value emitComplexExpr(const Expr *e); diff --git a/clang/lib/CIR/CodeGen/CIRGenValue.h b/clang/lib/CIR/CodeGen/CIRGenValue.h index 20a3d0ef61341..2002bd7e7c488 100644 --- a/clang/lib/CIR/CodeGen/CIRGenValue.h +++ b/clang/lib/CIR/CodeGen/CIRGenValue.h @@ -49,6 +49,7 @@ class RValue { bool isScalar() const { return flavor == Scalar; } bool isComplex() const { return flavor == Complex; } bool isAggregate() const { return flavor == Aggregate; } + bool isIgnored() const { return isScalar() && !getValue(); } bool isVolatileQualified() const { return isVolatile; } diff --git a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp index 22aada882defc..b5840ff12438e 100644 --- a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp +++ b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp @@ -289,7 +289,10 @@ void cir::ConditionOp::getSuccessorRegions( regions.emplace_back(getOperation(), loopOp->getResults()); } - assert(!cir::MissingFeatures::awaitOp()); + // Parent is an await: condition may branch to resume or suspend regions. + auto await = cast(getOperation()->getParentOp()); + regions.emplace_back(&await.getResume(), await.getResume().getArguments()); + regions.emplace_back(&await.getSuspend(), await.getSuspend().getArguments()); } MutableOperandRange @@ -299,8 +302,7 @@ cir::ConditionOp::getMutableSuccessorOperands(RegionSuccessor point) { } LogicalResult cir::ConditionOp::verify() { - assert(!cir::MissingFeatures::awaitOp()); - if (!isa(getOperation()->getParentOp())) + if (!isa(getOperation()->getParentOp())) return emitOpError("condition must be within a conditional region"); return success(); } @@ -1910,6 +1912,19 @@ void cir::FuncOp::print(OpAsmPrinter &p) { mlir::LogicalResult cir::FuncOp::verify() { + if (!isDeclaration() && getCoroutine()) { + bool foundAwait = false; + this->walk([&](Operation *op) { + if (auto await = dyn_cast(op)) { + foundAwait = true; + return; + } + }); + if (!foundAwait) + return emitOpError() + << "coroutine body must use at least one cir.await op"; + } + llvm::SmallSet labels; llvm::SmallSet gotos; llvm::SmallSet blockAddresses; @@ -2149,6 +2164,61 @@ OpFoldResult cir::UnaryOp::fold(FoldAdaptor adaptor) { return {}; } +//===----------------------------------------------------------------------===// +// AwaitOp +//===----------------------------------------------------------------------===// + +void cir::AwaitOp::build(OpBuilder &builder, OperationState &result, + cir::AwaitKind kind, BuilderCallbackRef readyBuilder, + BuilderCallbackRef suspendBuilder, + BuilderCallbackRef resumeBuilder) { + result.addAttribute(getKindAttrName(result.name), + cir::AwaitKindAttr::get(builder.getContext(), kind)); + { + OpBuilder::InsertionGuard guard(builder); + Region *readyRegion = result.addRegion(); + builder.createBlock(readyRegion); + readyBuilder(builder, result.location); + } + + { + OpBuilder::InsertionGuard guard(builder); + Region *suspendRegion = result.addRegion(); + builder.createBlock(suspendRegion); + suspendBuilder(builder, result.location); + } + + { + OpBuilder::InsertionGuard guard(builder); + Region *resumeRegion = result.addRegion(); + builder.createBlock(resumeRegion); + resumeBuilder(builder, result.location); + } +} + +void cir::AwaitOp::getSuccessorRegions( + mlir::RegionBranchPoint point, SmallVectorImpl ®ions) { + // If any index all the underlying regions branch back to the parent + // operation. + if (!point.isParent()) { + regions.push_back( + RegionSuccessor(getOperation(), getOperation()->getResults())); + return; + } + + // TODO: retrieve information from the promise and only push the + // necessary ones. Example: `std::suspend_never` on initial or final + // await's might allow suspend region to be skipped. + regions.push_back(RegionSuccessor(&this->getReady())); + regions.push_back(RegionSuccessor(&this->getSuspend())); + regions.push_back(RegionSuccessor(&this->getResume())); +} + +LogicalResult cir::AwaitOp::verify() { + if (!isa(this->getReady().back().getTerminator())) + return emitOpError("ready region must end with cir.condition"); + return success(); +} //===----------------------------------------------------------------------===// // CopyOp Definitions diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index b35359609521e..d45a2975c4afc 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -3931,6 +3931,12 @@ mlir::LogicalResult CIRToLLVMBlockAddressOpLowering::matchAndRewrite( return mlir::failure(); } +mlir::LogicalResult CIRToLLVMAwaitOpLowering::matchAndRewrite( + cir::AwaitOp op, OpAdaptor adaptor, + mlir::ConversionPatternRewriter &rewriter) const { + return mlir::failure(); +} + std::unique_ptr createConvertCIRToLLVMPass() { return std::make_unique(); } diff --git a/clang/lib/CodeGen/CGValue.h b/clang/lib/CodeGen/CGValue.h index c4ec8d207d2e3..6b381b59e71cd 100644 --- a/clang/lib/CodeGen/CGValue.h +++ b/clang/lib/CodeGen/CGValue.h @@ -64,6 +64,7 @@ class RValue { bool isScalar() const { return Flavor == Scalar; } bool isComplex() const { return Flavor == Complex; } bool isAggregate() const { return Flavor == Aggregate; } + bool isIgnored() const { return isScalar() && !getScalarVal(); } bool isVolatileQualified() const { return IsVolatile; } diff --git a/clang/test/CIR/CodeGen/coro-task.cpp b/clang/test/CIR/CodeGen/coro-task.cpp index 5738c815909ea..01e0786fbda71 100644 --- a/clang/test/CIR/CodeGen/coro-task.cpp +++ b/clang/test/CIR/CodeGen/coro-task.cpp @@ -111,6 +111,8 @@ co_invoke_fn co_invoke; // CIR-DAG: ![[VoidPromisse:.*]] = !cir.record::promise_type" padded {!u8i}> // CIR-DAG: ![[IntPromisse:.*]] = !cir.record::promise_type" padded {!u8i}> // CIR-DAG: ![[StdString:.*]] = !cir.record +// CIR-DAG: ![[SuspendAlways:.*]] = !cir.record + // CIR: module {{.*}} { // CIR-NEXT: cir.global external @_ZN5folly4coro9co_invokeE = #cir.zero : !rec_folly3A3Acoro3A3Aco_invoke_fn @@ -153,6 +155,33 @@ VoidTask silly_task() { // CIR: %[[RetObj:.*]] = cir.call @_ZN5folly4coro4TaskIvE12promise_type17get_return_objectEv(%[[VoidPromisseAddr]]) nothrow : {{.*}} -> ![[VoidTask]] // CIR: cir.store{{.*}} %[[RetObj]], %[[VoidTaskAddr]] : ![[VoidTask]] +// Start a new scope for the actual codegen for co_await, create temporary allocas for +// holding coroutine handle and the suspend_always struct. + +// CIR: cir.scope { +// CIR: %[[SuspendAlwaysAddr:.*]] = cir.alloca ![[SuspendAlways]], {{.*}} ["ref.tmp0"] {alignment = 1 : i64} + +// Effectively execute `coawait promise_type::initial_suspend()` by calling initial_suspend() and getting +// the suspend_always struct to use for cir.await. Note that we return by-value since we defer ABI lowering +// to later passes, same is done elsewhere. + +// CIR: %[[Tmp0:.*]] = cir.call @_ZN5folly4coro4TaskIvE12promise_type15initial_suspendEv(%[[VoidPromisseAddr]]) +// CIR: cir.store{{.*}} %[[Tmp0:.*]], %[[SuspendAlwaysAddr]] + +// +// Here we start mapping co_await to cir.await. +// + +// First regions `ready` has a special cir.yield code to veto suspension. + +// CIR: cir.await(init, ready : { +// CIR: cir.condition({{.*}}) +// CIR: }, suspend : { +// CIR: cir.yield +// CIR: }, resume : { +// CIR: cir.yield +// CIR: },) +// CIR: } folly::coro::Task byRef(const std::string& s) { co_return s.size(); @@ -172,3 +201,13 @@ folly::coro::Task byRef(const std::string& s) { // CIR: cir.store {{.*}} %[[LOAD]], %[[AllocaFnUse]] : !cir.ptr, !cir.ptr> // CIR: %[[RetObj:.*]] = cir.call @_ZN5folly4coro4TaskIiE12promise_type17get_return_objectEv(%4) nothrow : {{.*}} -> ![[IntTask]] // CIR: cir.store {{.*}} %[[RetObj]], %[[IntTaskAddr]] : ![[IntTask]] +// CIR: cir.scope { +// CIR: %[[SuspendAlwaysAddr:.*]] = cir.alloca ![[SuspendAlways]], {{.*}} ["ref.tmp0"] {alignment = 1 : i64} +// CIR: %[[Tmp0:.*]] = cir.call @_ZN5folly4coro4TaskIiE12promise_type15initial_suspendEv(%[[IntPromisseAddr]]) +// CIR: cir.await(init, ready : { +// CIR: cir.condition({{.*}}) +// CIR: }, suspend : { +// CIR: cir.yield +// CIR: }, resume : { +// CIR: cir.yield +// CIR: },) diff --git a/clang/test/CIR/IR/await.cir b/clang/test/CIR/IR/await.cir new file mode 100644 index 0000000000000..c1fb0d6d7c57c --- /dev/null +++ b/clang/test/CIR/IR/await.cir @@ -0,0 +1,21 @@ +// RUN: cir-opt %s --verify-roundtrip | FileCheck %s + +cir.func coroutine @checkPrintParse(%arg0 : !cir.bool) { + cir.await(user, ready : { + cir.condition(%arg0) + }, suspend : { + cir.yield + }, resume : { + cir.yield + },) + cir.return +} + +// CHECK: cir.func coroutine @checkPrintParse +// CHECK: cir.await(user, ready : { +// CHECK: cir.condition(%arg0) +// CHECK: }, suspend : { +// CHECK: cir.yield +// CHECK: }, resume : { +// CHECK: cir.yield +// CHECK: },) diff --git a/clang/test/CIR/IR/func.cir b/clang/test/CIR/IR/func.cir index 6e91898a3b452..4e79149315a9d 100644 --- a/clang/test/CIR/IR/func.cir +++ b/clang/test/CIR/IR/func.cir @@ -101,6 +101,15 @@ cir.func @ullfunc() -> !u64i { // CHECK: } cir.func coroutine @coro() { + cir.await(init, ready : { + %0 = cir.alloca !cir.bool, !cir.ptr, [""] {alignment = 1 : i64} + %1 = cir.load align(1) %0 : !cir.ptr, !cir.bool + cir.condition(%1) + }, suspend : { + cir.yield + }, resume : { + cir.yield + },) cir.return } // CHECK: cir.func{{.*}} coroutine @coro() diff --git a/clang/test/CIR/IR/invalid-await.cir b/clang/test/CIR/IR/invalid-await.cir new file mode 100644 index 0000000000000..5f422ca7e954e --- /dev/null +++ b/clang/test/CIR/IR/invalid-await.cir @@ -0,0 +1,19 @@ +// RUN: cir-opt %s -verify-diagnostics -split-input-file +cir.func coroutine @bad_task() { // expected-error {{coroutine body must use at least one cir.await op}} + cir.return +} + +// ----- + +cir.func coroutine @missing_condition() { + cir.scope { + cir.await(user, ready : { // expected-error {{ready region must end with cir.condition}} + cir.yield + }, suspend : { + cir.yield + }, resume : { + cir.yield + },) + } + cir.return +} From 040d9c94bebfc441f555de4617baf7da410ed959 Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Wed, 19 Nov 2025 22:11:20 +0000 Subject: [PATCH 33/48] [VPlan] Collect FMFs for in-loop reduction chain in VPlan. (NFC) Replace retrieving FMFs for in-loop reduction via underlying instruction + legal by collecting the flags during reduction chain traversal in VPlan. --- .../Transforms/Vectorize/LoopVectorize.cpp | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index 267be2e243fc3..36982aaf717ac 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -8665,6 +8665,11 @@ void LoopVectorizationPlanner::adjustRecipesForReductions( !RecurrenceDescriptor::isFindIVRecurrenceKind(Kind) && "AnyOf and FindIV reductions are not allowed for in-loop reductions"); + bool IsFPRecurrence = + RecurrenceDescriptor::isFloatingPointRecurrenceKind(Kind); + FastMathFlags FMFs = + IsFPRecurrence ? FastMathFlags::getFast() : FastMathFlags(); + // Collect the chain of "link" recipes for the reduction starting at PhiR. SetVector Worklist; Worklist.insert(PhiR); @@ -8705,6 +8710,15 @@ void LoopVectorizationPlanner::adjustRecipesForReductions( continue; } + if (IsFPRecurrence) { + FastMathFlags CurFMF = + cast(CurrentLink)->getFastMathFlags(); + if (match(CurrentLink, m_Select(m_VPValue(), m_VPValue(), m_VPValue()))) + CurFMF |= cast(CurrentLink->getOperand(0)) + ->getFastMathFlags(); + FMFs &= CurFMF; + } + Instruction *CurrentLinkI = CurrentLink->getUnderlyingInstr(); // Index of the first operand which holds a non-mask vector operand. @@ -8772,13 +8786,6 @@ void LoopVectorizationPlanner::adjustRecipesForReductions( if (CM.blockNeedsPredicationForAnyReason(CurrentLinkI->getParent())) CondOp = RecipeBuilder.getBlockInMask(CurrentLink->getParent()); - // TODO: Retrieve FMFs from recipes directly. - RecurrenceDescriptor RdxDesc = Legal->getRecurrenceDescriptor( - cast(PhiR->getUnderlyingInstr())); - // Non-FP RdxDescs will have all fast math flags set, so clear them. - FastMathFlags FMFs = isa(CurrentLinkI) - ? RdxDesc.getFastMathFlags() - : FastMathFlags(); auto *RedRecipe = new VPReductionRecipe( Kind, FMFs, CurrentLinkI, PreviousLink, VecOp, CondOp, PhiR->isOrdered(), CurrentLinkI->getDebugLoc()); From 3b49c927427a6e818fee154725b3a05ead6c09de Mon Sep 17 00:00:00 2001 From: Erich Keane Date: Wed, 19 Nov 2025 14:21:52 -0800 Subject: [PATCH 34/48] Fix build breakage from: #167948 (#168781) It appears that this broke the build by not using the 'correct' name for the expression. This is probably something that crossed in review. --- clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp index 08f44c7d87091..ac16702fb8e95 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp @@ -169,23 +169,23 @@ mlir::Value CIRGenFunction::emitX86BuiltinExpr(unsigned builtinID, case X86::BI__builtin_ia32_vec_set_v16hi: case X86::BI__builtin_ia32_vec_set_v8si: case X86::BI__builtin_ia32_vec_set_v4di: - cgm.errorNYI(e->getSourceRange(), + cgm.errorNYI(expr->getSourceRange(), std::string("unimplemented X86 builtin call: ") + getContext().BuiltinInfo.getName(builtinID)); return {}; case X86::BI_mm_setcsr: case X86::BI__builtin_ia32_ldmxcsr: { - mlir::Location loc = getLoc(e->getExprLoc()); - Address tmp = createMemTemp(e->getArg(0)->getType(), loc); + mlir::Location loc = getLoc(expr->getExprLoc()); + Address tmp = createMemTemp(expr->getArg(0)->getType(), loc); builder.createStore(loc, ops[0], tmp); - return emitIntrinsicCallOp(*this, e, "x86.sse.ldmxcsr", builder.getVoidTy(), - tmp.getPointer()); + return emitIntrinsicCallOp(*this, expr, "x86.sse.ldmxcsr", + builder.getVoidTy(), tmp.getPointer()); } case X86::BI_mm_getcsr: case X86::BI__builtin_ia32_stmxcsr: { - mlir::Location loc = getLoc(e->getExprLoc()); - Address tmp = createMemTemp(e->getType(), loc); - emitIntrinsicCallOp(*this, e, "x86.sse.stmxcsr", builder.getVoidTy(), + mlir::Location loc = getLoc(expr->getExprLoc()); + Address tmp = createMemTemp(expr->getType(), loc); + emitIntrinsicCallOp(*this, expr, "x86.sse.stmxcsr", builder.getVoidTy(), tmp.getPointer()); return builder.createLoad(loc, tmp); } From f2c9c7d654947cb1317f96547c15c256a1df4ce4 Mon Sep 17 00:00:00 2001 From: Erich Keane Date: Wed, 19 Nov 2025 14:22:53 -0800 Subject: [PATCH 35/48] [OpenACC][CIR] Fix atomic-capture single-line-postfix (#168717) In my last patch, it became clear during code review that the postfix operation was actually a read THEN update, not update/read like other single line versions. It wasn't clear at the time how much additional work this would be to make postfix work correctly (and they are a bit of a 'special' thing in codegen anyway), so this patch adds some functionality to sense this and special-cases it when generating the statement info for capture. --- clang/include/clang/AST/StmtOpenACC.h | 12 +++++-- clang/lib/AST/StmtOpenACC.cpp | 35 ++++++++++--------- .../CIR/CodeGenOpenACC/atomic-capture.cpp | 4 +-- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/clang/include/clang/AST/StmtOpenACC.h b/clang/include/clang/AST/StmtOpenACC.h index ad4e2d65771b8..2bd0b52071697 100644 --- a/clang/include/clang/AST/StmtOpenACC.h +++ b/clang/include/clang/AST/StmtOpenACC.h @@ -829,8 +829,13 @@ class OpenACCAtomicConstruct final // Listed as 'expr' in the standard, this is typically a generic expression // as a component. const Expr *RefExpr; + // If this is an 'update', records whether this is a post-fix + // increment/decrement. In the case where we have a single-line variant of + // 'capture' we have to form the IR differently if this is the case to make + // sure the old value is 'read' in the 2nd step. + bool IsPostfixIncDec = false; static SingleStmtInfo Empty() { - return {nullptr, nullptr, nullptr, nullptr}; + return {nullptr, nullptr, nullptr, nullptr, false}; } static SingleStmtInfo createRead(const Expr *WholeExpr, const Expr *V, @@ -841,8 +846,9 @@ class OpenACCAtomicConstruct final const Expr *RefExpr) { return {WholeExpr, /*V=*/nullptr, X, RefExpr}; } - static SingleStmtInfo createUpdate(const Expr *WholeExpr, const Expr *X) { - return {WholeExpr, /*V=*/nullptr, X, /*RefExpr=*/nullptr}; + static SingleStmtInfo createUpdate(const Expr *WholeExpr, const Expr *X, + bool PostfixIncDec) { + return {WholeExpr, /*V=*/nullptr, X, /*RefExpr=*/nullptr, PostfixIncDec}; } }; diff --git a/clang/lib/AST/StmtOpenACC.cpp b/clang/lib/AST/StmtOpenACC.cpp index d3a7e7601f618..ec8ceb949c6c0 100644 --- a/clang/lib/AST/StmtOpenACC.cpp +++ b/clang/lib/AST/StmtOpenACC.cpp @@ -347,16 +347,17 @@ getBinaryAssignOpArgs(const Expr *Op) { return getBinaryAssignOpArgs(Op, IsCompoundAssign); } -static std::optional getUnaryOpArgs(const Expr *Op) { +static std::optional> +getUnaryOpArgs(const Expr *Op) { if (const auto *UO = dyn_cast(Op)) - return UO->getSubExpr(); + return {{UO->getSubExpr(), UO->isPostfix()}}; if (const auto *OpCall = dyn_cast(Op)) { // Post-inc/dec have a second unused argument to differentiate it, so we // accept -- or ++ as unary, or any operator call with only 1 arg. if (OpCall->getNumArgs() == 1 || OpCall->getOperator() == OO_PlusPlus || OpCall->getOperator() == OO_MinusMinus) - return {OpCall->getArg(0)}; + return {{OpCall->getArg(0), /*IsPostfix=*/OpCall->getNumArgs() == 1}}; } return std::nullopt; @@ -410,10 +411,10 @@ getWriteStmtInfo(const Expr *E) { static std::optional getUpdateStmtInfo(const Expr *E) { - std::optional UnaryArgs = getUnaryOpArgs(E); + std::optional> UnaryArgs = getUnaryOpArgs(E); if (UnaryArgs) { auto Res = OpenACCAtomicConstruct::SingleStmtInfo::createUpdate( - E, (*UnaryArgs)->IgnoreImpCasts()); + E, UnaryArgs->first->IgnoreImpCasts(), UnaryArgs->second); if (!Res.X->isLValue() || !Res.X->getType()->isScalarType()) return std::nullopt; @@ -428,7 +429,7 @@ getUpdateStmtInfo(const Expr *E) { return std::nullopt; auto Res = OpenACCAtomicConstruct::SingleStmtInfo::createUpdate( - E, BinaryArgs->first->IgnoreImpCasts()); + E, BinaryArgs->first->IgnoreImpCasts(), /*PostFixIncDec=*/false); if (!Res.X->isLValue() || !Res.X->getType()->isScalarType()) return std::nullopt; @@ -513,17 +514,12 @@ getCaptureStmtInfo(const Stmt *AssocStmt) { return OpenACCAtomicConstruct::StmtInfo::createUpdateRead(*Update, *Read); } else { - // All of the possible forms (listed below) that are writable as a single - // line are expressed as an update, then as a read. We should be able to - // just run these two in the right order. - // UPDATE: READ - // v = x++; - // v = x--; - // v = ++x; - // v = --x; - // v = x binop=expr - // v = x = x binop expr - // v = x = expr binop x + // All of the forms that can be done in a single line fall into 2 + // categories: update/read, or read/update. The special cases are the + // postfix unary operators, which we have to make sure we do the 'read' + // first. However, we still parse these as the RHS first, so we have a + // 'reversing' step. READ: UPDATE v = x++; v = x--; UPDATE: READ v = ++x; v + // = --x; v = x binop=expr v = x = x binop expr v = x = expr binop x const Expr *E = cast(AssocStmt); @@ -535,6 +531,11 @@ getCaptureStmtInfo(const Stmt *AssocStmt) { // Fixup this, since the 'X' for the read is the result after write, but is // the same value as the LHS-most variable of the update(its X). Read->X = Update->X; + + // Postfix is a read FIRST, then an update. + if (Update->IsPostfixIncDec) + return OpenACCAtomicConstruct::StmtInfo::createReadUpdate(*Read, *Update); + return OpenACCAtomicConstruct::StmtInfo::createUpdateRead(*Update, *Read); } return {}; diff --git a/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp b/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp index 8bdffb41d1890..145c04268805f 100644 --- a/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp +++ b/clang/test/CIR/CodeGenOpenACC/atomic-capture.cpp @@ -23,6 +23,7 @@ void use(int x, int v, float f, HasOps ops) { // CHECK-NEXT: %[[CMP:.*]] = cir.cmp(ne, %[[X_LOAD]], %[[V_LOAD]]) : !s32i, !cir.bool // CHECK-NEXT: %[[IF_COND_CAST:.*]] = builtin.unrealized_conversion_cast %[[CMP:.*]] : !cir.bool to i1 // CHECK-NEXT: acc.atomic.capture if(%[[IF_COND_CAST]]) { + // CHECK-NEXT: acc.atomic.read %[[V_ALLOCA]] = %[[X_ALLOCA]] : !cir.ptr, !cir.ptr, !s32i // CHECK-NEXT: acc.atomic.update %[[X_ALLOCA]] : !cir.ptr { // CHECK-NEXT: ^bb0(%[[X_VAR:.*]]: !s32i{{.*}}): // CHECK-NEXT: %[[X_VAR_ALLOC:.*]] = cir.alloca !s32i, !cir.ptr, ["x_var", init] @@ -35,7 +36,6 @@ void use(int x, int v, float f, HasOps ops) { // CHECK-NEXT: %[[X_VAR_LOAD:.*]] = cir.load{{.*}} %[[X_VAR_ALLOC]] : !cir.ptr, !s32i // CHECK-NEXT: acc.yield %[[X_VAR_LOAD]] : !s32i // CHECK-NEXT: } - // CHECK-NEXT: acc.atomic.read %[[V_ALLOCA]] = %[[X_ALLOCA]] : !cir.ptr, !cir.ptr, !s32i // CHECK-NEXT: } #pragma acc atomic capture if (x != v) v = x++; @@ -59,6 +59,7 @@ void use(int x, int v, float f, HasOps ops) { v = ++x; // CHECK-NEXT: acc.atomic.capture { + // CHECK-NEXT: acc.atomic.read %[[V_ALLOCA]] = %[[X_ALLOCA]] : !cir.ptr, !cir.ptr, !s32i // CHECK-NEXT: acc.atomic.update %[[X_ALLOCA]] : !cir.ptr { // CHECK-NEXT: ^bb0(%[[X_VAR:.*]]: !s32i{{.*}}): // CHECK-NEXT: %[[X_VAR_ALLOC:.*]] = cir.alloca !s32i, !cir.ptr, ["x_var", init] @@ -71,7 +72,6 @@ void use(int x, int v, float f, HasOps ops) { // CHECK-NEXT: %[[X_VAR_LOAD:.*]] = cir.load{{.*}} %[[X_VAR_ALLOC]] : !cir.ptr, !s32i // CHECK-NEXT: acc.yield %[[X_VAR_LOAD]] : !s32i // CHECK-NEXT: } - // CHECK-NEXT: acc.atomic.read %[[V_ALLOCA]] = %[[X_ALLOCA]] : !cir.ptr, !cir.ptr, !s32i // CHECK-NEXT: } #pragma acc atomic capture v = x--; From 90ea49a9d17b01cc51d69bdd0c79b959955e605f Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Wed, 19 Nov 2025 14:27:34 -0800 Subject: [PATCH 36/48] [ConstantFolding] Generalize constant folding for vector_deinterleave2 to deinterleave3-8. (#168640) --- llvm/lib/Analysis/ConstantFolding.cpp | 49 +++-- .../InstSimplify/ConstProp/vector-calls.ll | 192 ++++++++++++++++++ 2 files changed, 225 insertions(+), 16 deletions(-) mode change 100755 => 100644 llvm/lib/Analysis/ConstantFolding.cpp diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp old mode 100755 new mode 100644 index a13df6c5bf552..4bece85d3cfbf --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -1666,6 +1666,12 @@ bool llvm::canConstantFoldCallTo(const CallBase *Call, const Function *F) { case Intrinsic::vector_interleave7: case Intrinsic::vector_interleave8: case Intrinsic::vector_deinterleave2: + case Intrinsic::vector_deinterleave3: + case Intrinsic::vector_deinterleave4: + case Intrinsic::vector_deinterleave5: + case Intrinsic::vector_deinterleave6: + case Intrinsic::vector_deinterleave7: + case Intrinsic::vector_deinterleave8: // Target intrinsics case Intrinsic::amdgcn_perm: case Intrinsic::amdgcn_wave_reduce_umin: @@ -4425,31 +4431,42 @@ ConstantFoldStructCall(StringRef Name, Intrinsic::ID IntrinsicID, return nullptr; return ConstantStruct::get(StTy, SinResult, CosResult); } - case Intrinsic::vector_deinterleave2: { + case Intrinsic::vector_deinterleave2: + case Intrinsic::vector_deinterleave3: + case Intrinsic::vector_deinterleave4: + case Intrinsic::vector_deinterleave5: + case Intrinsic::vector_deinterleave6: + case Intrinsic::vector_deinterleave7: + case Intrinsic::vector_deinterleave8: { + unsigned NumResults = StTy->getNumElements(); auto *Vec = Operands[0]; auto *VecTy = cast(Vec->getType()); + ElementCount ResultEC = + VecTy->getElementCount().divideCoefficientBy(NumResults); + if (auto *EltC = Vec->getSplatValue()) { - ElementCount HalfEC = VecTy->getElementCount().divideCoefficientBy(2); - auto *HalfVec = ConstantVector::getSplat(HalfEC, EltC); - return ConstantStruct::get(StTy, HalfVec, HalfVec); + auto *ResultVec = ConstantVector::getSplat(ResultEC, EltC); + SmallVector Results(NumResults, ResultVec); + return ConstantStruct::get(StTy, Results); } - if (!isa(Vec->getType())) + if (!ResultEC.isFixed()) return nullptr; - unsigned NumElements = VecTy->getElementCount().getFixedValue() / 2; - SmallVector Res0(NumElements), Res1(NumElements); - for (unsigned I = 0; I < NumElements; ++I) { - Constant *Elt0 = Vec->getAggregateElement(2 * I); - Constant *Elt1 = Vec->getAggregateElement(2 * I + 1); - if (!Elt0 || !Elt1) - return nullptr; - Res0[I] = Elt0; - Res1[I] = Elt1; + unsigned NumElements = ResultEC.getFixedValue(); + SmallVector Results(NumResults); + SmallVector Elements(NumElements); + for (unsigned I = 0; I != NumResults; ++I) { + for (unsigned J = 0; J != NumElements; ++J) { + Constant *Elt = Vec->getAggregateElement(J * NumResults + I); + if (!Elt) + return nullptr; + Elements[J] = Elt; + } + Results[I] = ConstantVector::get(Elements); } - return ConstantStruct::get(StTy, ConstantVector::get(Res0), - ConstantVector::get(Res1)); + return ConstantStruct::get(StTy, Results); } default: // TODO: Constant folding of vector intrinsics that fall through here does diff --git a/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll b/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll index fcae336f48b77..5d9ed867c5e68 100644 --- a/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll +++ b/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll @@ -130,3 +130,195 @@ define { , } @fold_scalable_vector_dein %1 = call { , } @llvm.vector.deinterleave2.v4f32.v8f32( splat (float 1.0)) ret { , } %1 } + +define { <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave3() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave3() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave3.v4i32.v12i32(<12 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , } @fold_scalable_vector_deinterleave3() { +; CHECK-LABEL: define { , , } @fold_scalable_vector_deinterleave3() { +; CHECK-NEXT: ret { , , } zeroinitializer +; + %1 = call { , , } @llvm.vector.deinterleave3.v4i32.v12i32( zeroinitializer) + ret { , , } %1 +} + +define { , , } @fold_scalable_vector_deinterleave3_splat() { +; CHECK-LABEL: define { , , } @fold_scalable_vector_deinterleave3_splat() { +; CHECK-NEXT: ret { , , } { splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , } @llvm.vector.deinterleave3.v4i32.v12i32( splat (i32 1)) + ret { , , } %1 +} + +define { , , } @fold_scalable_vector_deinterleave3_splatfp() { +; CHECK-LABEL: define { , , } @fold_scalable_vector_deinterleave3_splatfp() { +; CHECK-NEXT: ret { , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , } @llvm.vector.deinterleave3.v4f32.v12f32( splat (float 1.0)) + ret { , , } %1 +} + +define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave4() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave4() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave4.v4i32.v16i32(<16 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , , } @fold_scalable_vector_deinterleave4() { +; CHECK-LABEL: define { , , , } @fold_scalable_vector_deinterleave4() { +; CHECK-NEXT: ret { , , , } zeroinitializer +; + %1 = call { , , , } @llvm.vector.deinterleave4.v4i32.v16i32( zeroinitializer) + ret { , , , } %1 +} + +define { , , , } @fold_scalable_vector_deinterleave4_splat() { +; CHECK-LABEL: define { , , , } @fold_scalable_vector_deinterleave4_splat() { +; CHECK-NEXT: ret { , , , } { splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , , } @llvm.vector.deinterleave4.v4i32.v16i32( splat (i32 1)) + ret { , , , } %1 +} + +define { , , , } @fold_scalable_vector_deinterleave4_splatfp() { +; CHECK-LABEL: define { , , , } @fold_scalable_vector_deinterleave4_splatfp() { +; CHECK-NEXT: ret { , , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , , } @llvm.vector.deinterleave4.v4f32.v16f32( splat (float 1.0)) + ret { , , , } %1 +} + +define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave5() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave5() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave5.v4i32.v20i32(<20 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , , , } @fold_scalable_vector_deinterleave5() { +; CHECK-LABEL: define { , , , , } @fold_scalable_vector_deinterleave5() { +; CHECK-NEXT: ret { , , , , } zeroinitializer +; + %1 = call { , , , , } @llvm.vector.deinterleave5.v4i32.v20i32( zeroinitializer) + ret { , , , , } %1 +} + +define { , , , , } @fold_scalable_vector_deinterleave5_splat() { +; CHECK-LABEL: define { , , , , } @fold_scalable_vector_deinterleave5_splat() { +; CHECK-NEXT: ret { , , , , } { splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , , , } @llvm.vector.deinterleave5.v4i32.v20i32( splat (i32 1)) + ret { , , , , } %1 +} + +define { , , , , } @fold_scalable_vector_deinterleave5_splatfp() { +; CHECK-LABEL: define { , , , , } @fold_scalable_vector_deinterleave5_splatfp() { +; CHECK-NEXT: ret { , , , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , , , } @llvm.vector.deinterleave5.v4f32.v20f32( splat (float 1.0)) + ret { , , , , } %1 +} + +define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave6() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave6() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave6.v4i32.v24i32(<24 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , , , , } @fold_scalable_vector_deinterleave6() { +; CHECK-LABEL: define { , , , , , } @fold_scalable_vector_deinterleave6() { +; CHECK-NEXT: ret { , , , , , } zeroinitializer +; + %1 = call { , , , , , } @llvm.vector.deinterleave6.v4i32.v24i32( zeroinitializer) + ret { , , , , , } %1 +} + +define { , , , , , } @fold_scalable_vector_deinterleave6_splat() { +; CHECK-LABEL: define { , , , , , } @fold_scalable_vector_deinterleave6_splat() { +; CHECK-NEXT: ret { , , , , , } { splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , , , , } @llvm.vector.deinterleave6.v4i32.v24i32( splat (i32 1)) + ret { , , , , , } %1 +} + +define { , , , , , } @fold_scalable_vector_deinterleave6_splatfp() { +; CHECK-LABEL: define { , , , , , } @fold_scalable_vector_deinterleave6_splatfp() { +; CHECK-NEXT: ret { , , , , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , , , , } @llvm.vector.deinterleave6.v4f32.v24f32( splat (float 1.0)) + ret { , , , , , } %1 +} + +define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave7() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave7() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave7.v4i32.v28i32(<28 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , , , , , } @fold_scalable_vector_deinterleave7() { +; CHECK-LABEL: define { , , , , , , } @fold_scalable_vector_deinterleave7() { +; CHECK-NEXT: ret { , , , , , , } zeroinitializer +; + %1 = call { , , , , , , } @llvm.vector.deinterleave7.v4i32.v28i32( zeroinitializer) + ret { , , , , , , } %1 +} + +define { , , , , , , } @fold_scalable_vector_deinterleave7_splat() { +; CHECK-LABEL: define { , , , , , , } @fold_scalable_vector_deinterleave7_splat() { +; CHECK-NEXT: ret { , , , , , , } { splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , , , , , } @llvm.vector.deinterleave7.v4i32.v28i32( splat (i32 1)) + ret { , , , , , , } %1 +} + +define { , , , , , , } @fold_scalable_vector_deinterleave7_splatfp() { +; CHECK-LABEL: define { , , , , , , } @fold_scalable_vector_deinterleave7_splatfp() { +; CHECK-NEXT: ret { , , , , , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , , , , , } @llvm.vector.deinterleave7.v4f32.v28f32( splat (float 1.0)) + ret { , , , , , , } %1 +} + +define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave8() { +; CHECK-LABEL: define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @fold_vector_deinterleave8() { +; CHECK-NEXT: ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> , <4 x i32> } +; + %1 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave8.v4i32.v32i32(<32 x i32> ) + ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %1 +} + +define { , , , , , , , } @fold_scalable_vector_deinterleave8() { +; CHECK-LABEL: define { , , , , , , , } @fold_scalable_vector_deinterleave8() { +; CHECK-NEXT: ret { , , , , , , , } zeroinitializer +; + %1 = call { , , , , , , , } @llvm.vector.deinterleave8.v4i32.v32i32( zeroinitializer) + ret { , , , , , , , } %1 +} + +define { , , , , , , , } @fold_scalable_vector_deinterleave8_splat() { +; CHECK-LABEL: define { , , , , , , , } @fold_scalable_vector_deinterleave8_splat() { +; CHECK-NEXT: ret { , , , , , , , } { splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1) } +; + %1 = call { , , , , , , , } @llvm.vector.deinterleave8.v4i32.v32i32( splat (i32 1)) + ret { , , , , , , , } %1 +} + +define { , , , , , , , } @fold_scalable_vector_deinterleave8_splatfp() { +; CHECK-LABEL: define { , , , , , , , } @fold_scalable_vector_deinterleave8_splatfp() { +; CHECK-NEXT: ret { , , , , , , , } { splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00), splat (float 1.000000e+00) } +; + %1 = call { , , , , , , , } @llvm.vector.deinterleave8.v4f32.v32f32( splat (float 1.0)) + ret { , , , , , , , } %1 +} From 3f55f8b4e5512e5d50a077800a190afb3aa65ffc Mon Sep 17 00:00:00 2001 From: Andy Kaylor Date: Wed, 19 Nov 2025 14:30:02 -0800 Subject: [PATCH 37/48] [CIR] Handle non-empty null base class initialization (#168646) This implements null base class initialization for non-empty bases. --- .../include/clang/CIR/Dialect/IR/CIRTypes.td | 3 + clang/lib/CIR/CodeGen/CIRGenBuilder.h | 10 ++ clang/lib/CIR/CodeGen/CIRGenExprCXX.cpp | 42 +++++- clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp | 120 ++++++++++++++++-- clang/lib/CIR/CodeGen/CIRGenModule.h | 6 + clang/lib/CIR/CodeGen/CIRGenRecordLayout.h | 5 + clang/test/CIR/CodeGen/ctor-null-init.cpp | 60 +++++++++ 7 files changed, 236 insertions(+), 10 deletions(-) diff --git a/clang/include/clang/CIR/Dialect/IR/CIRTypes.td b/clang/include/clang/CIR/Dialect/IR/CIRTypes.td index 313184764f536..3e062add6633a 100644 --- a/clang/include/clang/CIR/Dialect/IR/CIRTypes.td +++ b/clang/include/clang/CIR/Dialect/IR/CIRTypes.td @@ -657,6 +657,9 @@ def CIR_RecordType : CIR_Type<"Record", "record", [ } llvm_unreachable("Invalid value for RecordType::getKind()"); } + mlir::Type getElementType(size_t idx) { + return getMembers()[idx]; + } std::string getPrefixedName() { return getKindAsStr() + "." + getName().getValue().str(); } diff --git a/clang/lib/CIR/CodeGen/CIRGenBuilder.h b/clang/lib/CIR/CodeGen/CIRGenBuilder.h index 5ab1d0e05cf8a..653ce00b29d36 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuilder.h +++ b/clang/lib/CIR/CodeGen/CIRGenBuilder.h @@ -212,6 +212,16 @@ class CIRGenBuilderTy : public cir::CIRBaseBuilderTy { &ignored); return fv.bitwiseIsEqual(fpVal); } + if (const auto recordVal = mlir::dyn_cast(attr)) { + for (const auto elt : recordVal.getMembers()) { + // FIXME(cir): the record's ID should not be considered a member. + if (mlir::isa(elt)) + continue; + if (!isNullValue(elt)) + return false; + } + return true; + } if (const auto arrayVal = mlir::dyn_cast(attr)) { if (mlir::isa(arrayVal.getElts())) diff --git a/clang/lib/CIR/CodeGen/CIRGenExprCXX.cpp b/clang/lib/CIR/CodeGen/CIRGenExprCXX.cpp index 007d873ff5db6..c3580dcfff171 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprCXX.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprCXX.cpp @@ -240,8 +240,46 @@ static void emitNullBaseClassInitialization(CIRGenFunction &cgf, if (base->isEmpty()) return; - cgf.cgm.errorNYI(base->getSourceRange(), - "emitNullBaseClassInitialization: not empty"); + const ASTRecordLayout &layout = cgf.getContext().getASTRecordLayout(base); + CharUnits nvSize = layout.getNonVirtualSize(); + + // We cannot simply zero-initialize the entire base sub-object if vbptrs are + // present, they are initialized by the most derived class before calling the + // constructor. + SmallVector, 1> stores; + stores.emplace_back(CharUnits::Zero(), nvSize); + + // Each store is split by the existence of a vbptr. + // TODO(cir): This only needs handling for the MS CXXABI. + assert(!cir::MissingFeatures::msabi()); + + // If the type contains a pointer to data member we can't memset it to zero. + // Instead, create a null constant and copy it to the destination. + // TODO: there are other patterns besides zero that we can usefully memset, + // like -1, which happens to be the pattern used by member-pointers. + // TODO: isZeroInitializable can be over-conservative in the case where a + // virtual base contains a member pointer. + mlir::TypedAttr nullConstantForBase = cgf.cgm.emitNullConstantForBase(base); + if (!cgf.getBuilder().isNullValue(nullConstantForBase)) { + cgf.cgm.errorNYI( + base->getSourceRange(), + "emitNullBaseClassInitialization: base constant is not null"); + } else { + // Otherwise, just memset the whole thing to zero. This is legal + // because in LLVM, all default initializers (other than the ones we just + // handled above) are guaranteed to have a bit pattern of all zeros. + // TODO(cir): When the MS CXXABI is supported, we will need to iterate over + // `stores` and create a separate memset for each one. For now, we know that + // there will only be one store and it will begin at offset zero, so that + // simplifies this code considerably. + assert(stores.size() == 1 && "Expected only one store"); + assert(stores[0].first == CharUnits::Zero() && + "Expected store to begin at offset zero"); + CIRGenBuilderTy builder = cgf.getBuilder(); + mlir::Location loc = cgf.getLoc(base->getBeginLoc()); + builder.createStore(loc, builder.getConstant(loc, nullConstantForBase), + destPtr); + } } void CIRGenFunction::emitCXXConstructExpr(const CXXConstructExpr *e, diff --git a/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp b/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp index 6af87a0159f0a..66f8ef9b05913 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp @@ -1521,6 +1521,101 @@ ConstantEmitter::~ConstantEmitter() { "not finalized after being initialized for non-abstract emission"); } +static mlir::TypedAttr emitNullConstantForBase(CIRGenModule &cgm, + mlir::Type baseType, + const CXXRecordDecl *baseDecl); + +static mlir::TypedAttr emitNullConstant(CIRGenModule &cgm, const RecordDecl *rd, + bool asCompleteObject) { + const CIRGenRecordLayout &layout = cgm.getTypes().getCIRGenRecordLayout(rd); + mlir::Type ty = (asCompleteObject ? layout.getCIRType() + : layout.getBaseSubobjectCIRType()); + auto recordTy = mlir::cast(ty); + + unsigned numElements = recordTy.getNumElements(); + SmallVector elements(numElements); + + auto *cxxrd = dyn_cast(rd); + // Fill in all the bases. + if (cxxrd) { + for (const CXXBaseSpecifier &base : cxxrd->bases()) { + if (base.isVirtual()) { + // Ignore virtual bases; if we're laying out for a complete + // object, we'll lay these out later. + continue; + } + + const auto *baseDecl = base.getType()->castAsCXXRecordDecl(); + // Ignore empty bases. + if (isEmptyRecordForLayout(cgm.getASTContext(), base.getType()) || + cgm.getASTContext() + .getASTRecordLayout(baseDecl) + .getNonVirtualSize() + .isZero()) + continue; + + unsigned fieldIndex = layout.getNonVirtualBaseCIRFieldNo(baseDecl); + mlir::Type baseType = recordTy.getElementType(fieldIndex); + elements[fieldIndex] = emitNullConstantForBase(cgm, baseType, baseDecl); + } + } + + // Fill in all the fields. + for (const FieldDecl *field : rd->fields()) { + // Fill in non-bitfields. (Bitfields always use a zero pattern, which we + // will fill in later.) + if (!field->isBitField() && + !isEmptyFieldForLayout(cgm.getASTContext(), field)) { + unsigned fieldIndex = layout.getCIRFieldNo(field); + elements[fieldIndex] = cgm.emitNullConstantAttr(field->getType()); + } + + // For unions, stop after the first named field. + if (rd->isUnion()) { + if (field->getIdentifier()) + break; + if (const auto *fieldRD = field->getType()->getAsRecordDecl()) + if (fieldRD->findFirstNamedDataMember()) + break; + } + } + + // Fill in the virtual bases, if we're working with the complete object. + if (cxxrd && asCompleteObject) { + for ([[maybe_unused]] const CXXBaseSpecifier &vbase : cxxrd->vbases()) { + cgm.errorNYI(vbase.getSourceRange(), "emitNullConstant: virtual base"); + return {}; + } + } + + // Now go through all other fields and zero them out. + for (unsigned i = 0; i != numElements; ++i) { + if (!elements[i]) { + cgm.errorNYI(rd->getSourceRange(), "emitNullConstant: field not zeroed"); + return {}; + } + } + + mlir::MLIRContext *mlirContext = recordTy.getContext(); + return cir::ConstRecordAttr::get(recordTy, + mlir::ArrayAttr::get(mlirContext, elements)); +} + +/// Emit the null constant for a base subobject. +static mlir::TypedAttr emitNullConstantForBase(CIRGenModule &cgm, + mlir::Type baseType, + const CXXRecordDecl *baseDecl) { + const CIRGenRecordLayout &baseLayout = + cgm.getTypes().getCIRGenRecordLayout(baseDecl); + + // Just zero out bases that don't have any pointer to data members. + if (baseLayout.isZeroInitializableAsBase()) + return cgm.getBuilder().getZeroInitAttr(baseType); + + // Otherwise, we can just use its null constant. + return emitNullConstant(cgm, baseDecl, /*asCompleteObject=*/false); +} + mlir::Attribute ConstantEmitter::tryEmitPrivateForVarInit(const VarDecl &d) { // Make a quick check if variable can be default NULL initialized // and avoid going through rest of code which may do, for c++11, @@ -1820,23 +1915,32 @@ mlir::Attribute ConstantEmitter::tryEmitPrivate(const APValue &value, } mlir::Value CIRGenModule::emitNullConstant(QualType t, mlir::Location loc) { - if (t->getAs()) { - return builder.getNullPtr(getTypes().convertTypeForMem(t), loc); - } + return builder.getConstant(loc, emitNullConstantAttr(t)); +} + +mlir::TypedAttr CIRGenModule::emitNullConstantAttr(QualType t) { + if (t->getAs()) + return builder.getConstNullPtrAttr(getTypes().convertTypeForMem(t)); if (getTypes().isZeroInitializable(t)) - return builder.getNullValue(getTypes().convertTypeForMem(t), loc); + return builder.getZeroInitAttr(getTypes().convertTypeForMem(t)); if (getASTContext().getAsConstantArrayType(t)) { - errorNYI("CIRGenModule::emitNullConstant ConstantArrayType"); + errorNYI("CIRGenModule::emitNullConstantAttr ConstantArrayType"); + return {}; } - if (t->isRecordType()) - errorNYI("CIRGenModule::emitNullConstant RecordType"); + if (const RecordType *rt = t->getAs()) + return ::emitNullConstant(*this, rt->getDecl(), /*asCompleteObject=*/true); assert(t->isMemberDataPointerType() && "Should only see pointers to data members here!"); - errorNYI("CIRGenModule::emitNullConstant unsupported type"); + errorNYI("CIRGenModule::emitNullConstantAttr unsupported type"); return {}; } + +mlir::TypedAttr +CIRGenModule::emitNullConstantForBase(const CXXRecordDecl *record) { + return ::emitNullConstant(*this, record, false); +} diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.h b/clang/lib/CIR/CodeGen/CIRGenModule.h index dc28d9e8e9d33..7601e39a798d9 100644 --- a/clang/lib/CIR/CodeGen/CIRGenModule.h +++ b/clang/lib/CIR/CodeGen/CIRGenModule.h @@ -461,6 +461,12 @@ class CIRGenModule : public CIRGenTypeCache { /// expression of the given type. mlir::Value emitNullConstant(QualType t, mlir::Location loc); + mlir::TypedAttr emitNullConstantAttr(QualType t); + + /// Return a null constant appropriate for zero-initializing a base class with + /// the given type. This is usually, but not always, an LLVM null constant. + mlir::TypedAttr emitNullConstantForBase(const CXXRecordDecl *record); + llvm::StringRef getMangledName(clang::GlobalDecl gd); void emitTentativeDefinition(const VarDecl *d); diff --git a/clang/lib/CIR/CodeGen/CIRGenRecordLayout.h b/clang/lib/CIR/CodeGen/CIRGenRecordLayout.h index bf0ddc5875059..c9364971e080c 100644 --- a/clang/lib/CIR/CodeGen/CIRGenRecordLayout.h +++ b/clang/lib/CIR/CodeGen/CIRGenRecordLayout.h @@ -184,6 +184,11 @@ class CIRGenRecordLayout { return fieldIdxMap.lookup(fd); } + unsigned getNonVirtualBaseCIRFieldNo(const CXXRecordDecl *rd) const { + assert(nonVirtualBases.count(rd) && "Invalid non-virtual base!"); + return nonVirtualBases.lookup(rd); + } + /// Check whether this struct can be C++ zero-initialized /// with a zeroinitializer. bool isZeroInitializable() const { return zeroInitializable; } diff --git a/clang/test/CIR/CodeGen/ctor-null-init.cpp b/clang/test/CIR/CodeGen/ctor-null-init.cpp index 4324b329c8b41..6f31a46305ae8 100644 --- a/clang/test/CIR/CodeGen/ctor-null-init.cpp +++ b/clang/test/CIR/CodeGen/ctor-null-init.cpp @@ -29,3 +29,63 @@ void test_empty_base_null_init() { // OGCG-NEXT: entry: // OGCG-NEXT: %[[B:.*]] = alloca %struct.B // OGCG-NEXT: ret void + + +struct C { + int c; + C() = default; + C(int); // This constructor triggers the null base class initialization. +}; + +struct D : C { +}; + +void test_non_empty_base_null_init() { + D{}; +} + +// CIR: cir.func {{.*}} @_Z29test_non_empty_base_null_initv() +// CIR: %[[TMP:.*]] = cir.alloca !rec_D, !cir.ptr, ["agg.tmp.ensured"] +// CIR: %[[BASE:.*]] = cir.base_class_addr %[[TMP]] : !cir.ptr nonnull [0] -> !cir.ptr +// CIR: %[[ZERO:.*]] = cir.const #cir.const_record<{#cir.int<0> : !s32i}> : !rec_C +// CIR: cir.store{{.*}} %[[ZERO]], %[[BASE]] + +// LLVM: define{{.*}} void @_Z29test_non_empty_base_null_initv() +// LLVM: %[[TMP:.*]] = alloca %struct.D +// LLVM: store %struct.C zeroinitializer, ptr %[[TMP]] + +// OGCG: define {{.*}} void @_Z29test_non_empty_base_null_initv() +// OGCG: %[[TMP:.*]] = alloca %struct.D +// OGCG: %[[BASE:.*]] = getelementptr inbounds i8, ptr %[[TMP]], i64 0 +// OGCG: call void @llvm.memset.p0.i64(ptr{{.*}} %[[BASE]], i8 0, i64 4, i1 false) + +struct E { + int e; +}; + +struct F : E { + F() = default; + F(int); +}; + +struct G : F { +}; + +void test_base_chain_null_init() { + G{}; +} + +// CIR: cir.func {{.*}} @_Z25test_base_chain_null_initv() +// CIR: %[[TMP:.*]] = cir.alloca !rec_G, !cir.ptr, ["agg.tmp.ensured"] +// CIR: %[[BASE:.*]] = cir.base_class_addr %[[TMP]] : !cir.ptr nonnull [0] -> !cir.ptr +// CIR: %[[ZERO:.*]] = cir.const #cir.const_record<{#cir.zero : !rec_E}> : !rec_F +// CIR: cir.store{{.*}} %[[ZERO]], %[[BASE]] + +// LLVM: define{{.*}} void @_Z25test_base_chain_null_initv() +// LLVM: %[[TMP:.*]] = alloca %struct.G +// LLVM: store %struct.F zeroinitializer, ptr %[[TMP]] + +// OGCG: define {{.*}} void @_Z25test_base_chain_null_initv() +// OGCG: %[[TMP:.*]] = alloca %struct.G +// OGCG: %[[BASE:.*]] = getelementptr inbounds i8, ptr %[[TMP]], i64 0 +// OGCG: call void @llvm.memset.p0.i64(ptr{{.*}} %[[BASE]], i8 0, i64 4, i1 false) From 308185e61abb5a06af1786902f1b3768b5d46be5 Mon Sep 17 00:00:00 2001 From: Rahul Joshi Date: Wed, 19 Nov 2025 14:40:20 -0800 Subject: [PATCH 38/48] [NFC][TableGen] Use `IfGuardEmitter` in CallingConvEmitter (#168763) Use `IfGuardEmitter` in CallingConvEmitter. Additionally refactor the code a bit to extract duplicated code to emit the CC function prototype into a helper function. --- llvm/utils/TableGen/CallingConvEmitter.cpp | 52 +++++++++------------- 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/llvm/utils/TableGen/CallingConvEmitter.cpp b/llvm/utils/TableGen/CallingConvEmitter.cpp index e0d933723ad66..2b20b854a9b1a 100644 --- a/llvm/utils/TableGen/CallingConvEmitter.cpp +++ b/llvm/utils/TableGen/CallingConvEmitter.cpp @@ -15,6 +15,7 @@ #include "Common/CodeGenTarget.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/InterleavedRange.h" +#include "llvm/TableGen/CodeGenHelpers.h" #include "llvm/TableGen/Error.h" #include "llvm/TableGen/Record.h" #include "llvm/TableGen/TGTimer.h" @@ -54,6 +55,21 @@ class CallingConvEmitter { }; } // End anonymous namespace +static void emitCCHeader(raw_ostream &O, const Record *CC, StringRef Suffix) { + unsigned Pad = CC->getName().size(); + if (CC->getValueAsBit("Entry")) { + O << "bool llvm::"; + Pad += 12; + } else { + O << "static bool "; + Pad += 13; + } + O << CC->getName() << "(unsigned ValNo, MVT ValVT,\n" + << indent(Pad) << "MVT LocVT, CCValAssign::LocInfo LocInfo,\n" + << indent(Pad) << "ISD::ArgFlagsTy ArgFlags, Type *OrigTy, CCState &State)" + << Suffix; +} + void CallingConvEmitter::run(raw_ostream &O) { emitSourceFileHeader("Calling Convention Implementation Fragment", O); @@ -63,35 +79,20 @@ void CallingConvEmitter::run(raw_ostream &O) { // Emit prototypes for all of the non-custom CC's so that they can forward ref // each other. Records.getTimer().startTimer("Emit prototypes"); - O << "#ifndef GET_CC_REGISTER_LISTS\n\n"; + IfGuardEmitter IfGuard(O, "!defined(GET_CC_REGISTER_LISTS)"); for (const Record *CC : CCs) { - if (!CC->getValueAsBit("Custom")) { - unsigned Pad = CC->getName().size(); - if (CC->getValueAsBit("Entry")) { - O << "bool llvm::"; - Pad += 12; - } else { - O << "static bool "; - Pad += 13; - } - O << CC->getName() << "(unsigned ValNo, MVT ValVT,\n" - << std::string(Pad, ' ') << "MVT LocVT, CCValAssign::LocInfo LocInfo,\n" - << std::string(Pad, ' ') - << "ISD::ArgFlagsTy ArgFlags, Type *OrigTy, CCState &State);\n"; - } + if (!CC->getValueAsBit("Custom")) + emitCCHeader(O, CC, ";\n"); } // Emit each non-custom calling convention description in full. Records.getTimer().startTimer("Emit full descriptions"); for (const Record *CC : CCs) { - if (!CC->getValueAsBit("Custom")) { + if (!CC->getValueAsBit("Custom")) emitCallingConv(CC, O); - } } emitArgRegisterLists(O); - - O << "\n#endif // CC_REGISTER_LIST\n"; } void CallingConvEmitter::emitCallingConv(const Record *CC, raw_ostream &O) { @@ -105,18 +106,7 @@ void CallingConvEmitter::emitCallingConv(const Record *CC, raw_ostream &O) { AssignedRegsMap[CurrentAction] = {}; O << "\n\n"; - unsigned Pad = CurrentAction.size(); - if (CC->getValueAsBit("Entry")) { - O << "bool llvm::"; - Pad += 12; - } else { - O << "static bool "; - Pad += 13; - } - O << CurrentAction << "(unsigned ValNo, MVT ValVT,\n" - << std::string(Pad, ' ') << "MVT LocVT, CCValAssign::LocInfo LocInfo,\n" - << std::string(Pad, ' ') << "ISD::ArgFlagsTy ArgFlags, Type *OrigTy, " - << "CCState &State) {\n"; + emitCCHeader(O, CC, " {\n"); // Emit all of the actions, in order. for (unsigned I = 0, E = CCActions->size(); I != E; ++I) { const Record *Action = CCActions->getElementAsRecord(I); From 9b7fd0099e79b0f5b824027cbae8a25356486ac9 Mon Sep 17 00:00:00 2001 From: Erich Keane Date: Wed, 19 Nov 2025 14:47:23 -0800 Subject: [PATCH 39/48] [OpenACC] Fix crash when checking an section in a 'link' clause (#168783) I saw this while doing lowering, we were not properly looking into the array sections for the variable. Presumably we didn't do a good job of making sure we did this right when making this extension, and missed this spot. --- clang/lib/Sema/SemaOpenACCClause.cpp | 15 ++++++++------- clang/test/SemaOpenACC/declare-construct.cpp | 7 +++++++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/clang/lib/Sema/SemaOpenACCClause.cpp b/clang/lib/Sema/SemaOpenACCClause.cpp index 17078e8814a43..2a54d984cdffb 100644 --- a/clang/lib/Sema/SemaOpenACCClause.cpp +++ b/clang/lib/Sema/SemaOpenACCClause.cpp @@ -1891,13 +1891,6 @@ SemaOpenACC::ActOnClause(ArrayRef ExistingClauses, if (DiagnoseAllowedClauses(Clause.getDirectiveKind(), Clause.getClauseKind(), Clause.getBeginLoc())) return nullptr; - //// Diagnose that we don't support this clause on this directive. - // if (!doesClauseApplyToDirective(Clause.getDirectiveKind(), - // Clause.getClauseKind())) { - // Diag(Clause.getBeginLoc(), diag::err_acc_clause_appertainment) - // << Clause.getDirectiveKind() << Clause.getClauseKind(); - // return nullptr; - // } if (const auto *DevTypeClause = llvm::find_if( ExistingClauses, llvm::IsaPred); @@ -2256,6 +2249,14 @@ SemaOpenACC::CheckLinkClauseVarList(ArrayRef VarExprs) { continue; } + while (isa(VarExpr)) { + if (auto *ASE = dyn_cast(VarExpr)) + VarExpr = ASE->getBase()->IgnoreParenImpCasts(); + else + VarExpr = + cast(VarExpr)->getBase()->IgnoreParenImpCasts(); + } + const auto *DRE = cast(VarExpr); const VarDecl *Var = dyn_cast(DRE->getDecl()); diff --git a/clang/test/SemaOpenACC/declare-construct.cpp b/clang/test/SemaOpenACC/declare-construct.cpp index 6828ecdf9ebc1..c2ac72122ee74 100644 --- a/clang/test/SemaOpenACC/declare-construct.cpp +++ b/clang/test/SemaOpenACC/declare-construct.cpp @@ -308,6 +308,13 @@ struct Struct2 { // expected-error@+2{{variable referenced by 'link' clause not in global or namespace scope must be marked 'extern'}} // expected-error@+1{{variable referenced by 'link' clause not in global or namespace scope must be marked 'extern'}} #pragma acc declare link(I, Local, ExternLocal) + + int Local2[5]; + int Local3[5]; + // expected-error@+3{{OpenACC variable on 'declare' construct is not a valid variable name or array name}} + // expected-warning@+2{{sub-array as a variable on 'declare' construct is not a valid variable name or array name}} + // expected-error@+1{{variable referenced by 'link' clause not in global or namespace scope must be marked 'extern'}} +#pragma acc declare link(Local2[1], Local3[1:1]) } }; From 19fe9b477b570fd395a161638c59e66b35d1a9ac Mon Sep 17 00:00:00 2001 From: Helena Kotas Date: Wed, 19 Nov 2025 14:56:49 -0800 Subject: [PATCH 40/48] [HLSL][TableGen] Add `__hlsl_resource_t` to known built-in function types (#163465) This change adds resource handle type `__hlsl_resource_t` to the list of types recognized in the Clang's built-in functions prototype string. HLSL has built-in resource classes and some of them have many methods, such as [Texture2D](https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/sm5-object-texture2d). Most of these methods will be implemented by built-in functions that will take resource handle as an argument. This change enables us to move from generic `void(...)` prototype string for these methods and explicit argument checking in `SemaHLSL.cpp` to a prototype string with explicit argument types. Argument checking in `SemaHLSL.cpp` can be reduced to handle just the rules that cannot be expressed in the prototype string (for example verifying that the offset value in `__builtin_hlsl_buffer_update_counter` is `1` or `-1`). In order to make this work, we now allow conversions from attributed resource handle type such as `__hlsl_resource_t [[hlsl::resource_class(UAV)]] [[hlsl::contained_type(float)]]` to a plain non-attributed `__hlsl_resource_t` type. --- clang/include/clang/Basic/Builtins.td | 16 ++--- clang/lib/AST/ASTContext.cpp | 4 ++ clang/lib/Sema/SemaHLSL.cpp | 65 ++++--------------- clang/lib/Sema/SemaOverload.cpp | 42 ++++++++---- .../test/AST/HLSL/ByteAddressBuffers-AST.hlsl | 16 ++--- .../test/AST/HLSL/StructuredBuffers-AST.hlsl | 52 +++++++-------- clang/test/AST/HLSL/TypedBuffers-AST.hlsl | 16 ++--- .../buffer_update_counter-errors.hlsl | 4 +- clang/utils/TableGen/ClangBuiltinsEmitter.cpp | 1 + 9 files changed, 96 insertions(+), 120 deletions(-) diff --git a/clang/include/clang/Basic/Builtins.td b/clang/include/clang/Basic/Builtins.td index 47da17e5cfe83..502382a069856 100644 --- a/clang/include/clang/Basic/Builtins.td +++ b/clang/include/clang/Basic/Builtins.td @@ -4949,25 +4949,25 @@ def HLSLResourceGetPointer : LangBuiltin<"HLSL_LANG"> { def HLSLResourceUninitializedHandle : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_uninitializedhandle"]; let Attributes = [NoThrow]; - let Prototype = "void(...)"; + let Prototype = "__hlsl_resource_t(__hlsl_resource_t)"; } def HLSLResourceHandleFromBinding : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_handlefrombinding"]; let Attributes = [NoThrow]; - let Prototype = "void(...)"; + let Prototype = "__hlsl_resource_t(__hlsl_resource_t, uint32_t, uint32_t, int32_t, uint32_t, char const*)"; } def HLSLResourceHandleFromImplicitBinding : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_handlefromimplicitbinding"]; let Attributes = [NoThrow]; - let Prototype = "void(...)"; + let Prototype = "__hlsl_resource_t(__hlsl_resource_t, uint32_t, uint32_t, int32_t, uint32_t, char const*)"; } def HLSLResourceCounterHandleFromImplicitBinding : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_counterhandlefromimplicitbinding"]; - let Attributes = [NoThrow, CustomTypeChecking]; - let Prototype = "void(...)"; + let Attributes = [NoThrow]; + let Prototype = "__hlsl_resource_t(__hlsl_resource_t, uint32_t, uint32_t)"; } def HLSLResourceNonUniformIndex : LangBuiltin<"HLSL_LANG"> { @@ -4979,13 +4979,13 @@ def HLSLResourceNonUniformIndex : LangBuiltin<"HLSL_LANG"> { def HLSLResourceGetDimensionsX : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_getdimensions_x"]; let Attributes = [NoThrow]; - let Prototype = "void(...)"; + let Prototype = "void(__hlsl_resource_t, uint32_t&)"; } def HLSLResourceGetStride : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_resource_getstride"]; let Attributes = [NoThrow]; - let Prototype = "void(...)"; + let Prototype = "void(__hlsl_resource_t, uint32_t&)"; } def HLSLAll : LangBuiltin<"HLSL_LANG"> { @@ -5213,7 +5213,7 @@ def HLSLRadians : LangBuiltin<"HLSL_LANG"> { def HLSLBufferUpdateCounter : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_buffer_update_counter"]; let Attributes = [NoThrow]; - let Prototype = "uint32_t(...)"; + let Prototype = "uint32_t(__hlsl_resource_t, int)"; } def HLSLSplitDouble: LangBuiltin<"HLSL_LANG"> { diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 72e5c3738919b..b929b0fc1aa8e 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -12540,6 +12540,10 @@ static QualType DecodeTypeFromStr(const char *&Str, const ASTContext &Context, Type = Context.AMDGPUTextureTy; break; } + case 'r': { + Type = Context.HLSLResourceTy; + break; + } default: llvm_unreachable("Unexpected target builtin type"); } diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp index e7ee3b1adf941..c5666941fd36a 100644 --- a/clang/lib/Sema/SemaHLSL.cpp +++ b/clang/lib/Sema/SemaHLSL.cpp @@ -3058,54 +3058,29 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { break; } case Builtin::BI__builtin_hlsl_resource_uninitializedhandle: { - if (SemaRef.checkArgCount(TheCall, 1) || - CheckResourceHandle(&SemaRef, TheCall, 0)) - return true; - // use the type of the handle (arg0) as a return type + assert(TheCall->getNumArgs() == 1 && "expected 1 arg"); + // Update return type to be the attributed resource type from arg0. QualType ResourceTy = TheCall->getArg(0)->getType(); TheCall->setType(ResourceTy); break; } case Builtin::BI__builtin_hlsl_resource_handlefrombinding: { - ASTContext &AST = SemaRef.getASTContext(); - if (SemaRef.checkArgCount(TheCall, 6) || - CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(2), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(3), AST.IntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(4), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(5), - AST.getPointerType(AST.CharTy.withConst()))) - return true; - // use the type of the handle (arg0) as a return type + assert(TheCall->getNumArgs() == 6 && "expected 6 args"); + // Update return type to be the attributed resource type from arg0. QualType ResourceTy = TheCall->getArg(0)->getType(); TheCall->setType(ResourceTy); break; } case Builtin::BI__builtin_hlsl_resource_handlefromimplicitbinding: { - ASTContext &AST = SemaRef.getASTContext(); - if (SemaRef.checkArgCount(TheCall, 6) || - CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(2), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(3), AST.IntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(4), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(5), - AST.getPointerType(AST.CharTy.withConst()))) - return true; - // use the type of the handle (arg0) as a return type + assert(TheCall->getNumArgs() == 6 && "expected 6 args"); + // Update return type to be the attributed resource type from arg0. QualType ResourceTy = TheCall->getArg(0)->getType(); TheCall->setType(ResourceTy); break; } case Builtin::BI__builtin_hlsl_resource_counterhandlefromimplicitbinding: { + assert(TheCall->getNumArgs() == 3 && "expected 3 args"); ASTContext &AST = SemaRef.getASTContext(); - if (SemaRef.checkArgCount(TheCall, 3) || - CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), AST.UnsignedIntTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(2), AST.UnsignedIntTy)) - return true; - QualType MainHandleTy = TheCall->getArg(0)->getType(); auto *MainResType = MainHandleTy->getAs(); auto MainAttrs = MainResType->getAttrs(); @@ -3114,27 +3089,11 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { QualType CounterHandleTy = AST.getHLSLAttributedResourceType( MainResType->getWrappedType(), MainResType->getContainedType(), MainAttrs); + // Update return type to be the attributed resource type from arg0 + // with added IsCounter flag. TheCall->setType(CounterHandleTy); break; } - case Builtin::BI__builtin_hlsl_resource_getdimensions_x: { - ASTContext &AST = SemaRef.getASTContext(); - if (SemaRef.checkArgCount(TheCall, 2) || - CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), AST.UnsignedIntTy) || - CheckModifiableLValue(&SemaRef, TheCall, 1)) - return true; - break; - } - case Builtin::BI__builtin_hlsl_resource_getstride: { - ASTContext &AST = SemaRef.getASTContext(); - if (SemaRef.checkArgCount(TheCall, 2) || - CheckResourceHandle(&SemaRef, TheCall, 0) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), AST.UnsignedIntTy) || - CheckModifiableLValue(&SemaRef, TheCall, 1)) - return true; - break; - } case Builtin::BI__builtin_hlsl_and: case Builtin::BI__builtin_hlsl_or: { if (SemaRef.checkArgCount(TheCall, 2)) @@ -3434,14 +3393,12 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { break; } case Builtin::BI__builtin_hlsl_buffer_update_counter: { + assert(TheCall->getNumArgs() == 2 && "expected 2 args"); auto checkResTy = [](const HLSLAttributedResourceType *ResTy) -> bool { return !(ResTy->getAttrs().ResourceClass == ResourceClass::UAV && ResTy->getAttrs().RawBuffer && ResTy->hasContainedType()); }; - if (SemaRef.checkArgCount(TheCall, 2) || - CheckResourceHandle(&SemaRef, TheCall, 0, checkResTy) || - CheckArgTypeMatches(&SemaRef, TheCall->getArg(1), - SemaRef.getASTContext().IntTy)) + if (CheckResourceHandle(&SemaRef, TheCall, 0, checkResTy)) return true; Expr *OffsetExpr = TheCall->getArg(1); std::optional Offset = diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 37f351174e3d0..c12f92dfdab66 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -1825,20 +1825,34 @@ TryImplicitConversion(Sema &S, Expr *From, QualType ToType, return ICS; } - if (S.getLangOpts().HLSL && ToType->isHLSLAttributedResourceType() && - FromType->isHLSLAttributedResourceType()) { - auto *ToResType = cast(ToType); - auto *FromResType = cast(FromType); - if (S.Context.hasSameUnqualifiedType(ToResType->getWrappedType(), - FromResType->getWrappedType()) && - S.Context.hasSameUnqualifiedType(ToResType->getContainedType(), - FromResType->getContainedType()) && - ToResType->getAttrs() == FromResType->getAttrs()) { - ICS.setStandard(); - ICS.Standard.setAsIdentityConversion(); - ICS.Standard.setFromType(FromType); - ICS.Standard.setAllToTypes(ToType); - return ICS; + if (S.getLangOpts().HLSL) { + // Handle conversion of the HLSL resource types. + const Type *FromTy = FromType->getUnqualifiedDesugaredType(); + if (FromTy->isHLSLAttributedResourceType()) { + // Attributed resource types can convert to other attributed + // resource types with the same attributes and contained types, + // or to __hlsl_resource_t without any attributes. + bool CanConvert = false; + const Type *ToTy = ToType->getUnqualifiedDesugaredType(); + if (ToTy->isHLSLAttributedResourceType()) { + auto *ToResType = cast(ToTy); + auto *FromResType = cast(FromTy); + if (S.Context.hasSameUnqualifiedType(ToResType->getWrappedType(), + FromResType->getWrappedType()) && + S.Context.hasSameUnqualifiedType(ToResType->getContainedType(), + FromResType->getContainedType()) && + ToResType->getAttrs() == FromResType->getAttrs()) + CanConvert = true; + } else if (ToTy->isHLSLResourceType()) { + CanConvert = true; + } + if (CanConvert) { + ICS.setStandard(); + ICS.Standard.setAsIdentityConversion(); + ICS.Standard.setFromType(FromType); + ICS.Standard.setAllToTypes(ToType); + return ICS; + } } } diff --git a/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl b/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl index 61d5e5ab44c97..2713cc19ea2be 100644 --- a/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl +++ b/clang/test/AST/HLSL/ByteAddressBuffers-AST.hlsl @@ -50,8 +50,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t -// CHECK-NEXT: ImplicitCastExpr {{.*}} -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' '__hlsl_resource_t (__hlsl_resource_t) noexcept' // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: AlwaysInlineAttr @@ -97,8 +97,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int' @@ -127,8 +127,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int' @@ -149,8 +149,8 @@ RESOURCE Buffer; // CHECK-NEXT: HLSLParamModifierAttr {{.*}} out // CHECK-NEXT: CompoundStmt // CHECK-NEXT: CallExpr {{.*}} 'void' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(__hlsl_resource_t, unsigned int &) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (__hlsl_resource_t, unsigned int &) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}} // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'dim' 'unsigned int &__restrict' diff --git a/clang/test/AST/HLSL/StructuredBuffers-AST.hlsl b/clang/test/AST/HLSL/StructuredBuffers-AST.hlsl index 7a8c57c59643d..538eb5256f8d5 100644 --- a/clang/test/AST/HLSL/StructuredBuffers-AST.hlsl +++ b/clang/test/AST/HLSL/StructuredBuffers-AST.hlsl @@ -97,8 +97,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t -// CHECK-NEXT: ImplicitCastExpr {{.*}} -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' '__hlsl_resource_t (__hlsl_resource_t) noexcept' // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: AlwaysInlineAttr @@ -154,8 +154,8 @@ RESOURCE Buffer; // CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-BINDING-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-BINDING-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' 'void (...) noexcept' +// CHECK-BINDING-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int' @@ -182,8 +182,8 @@ RESOURCE Buffer; // CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-BINDING-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-BINDING-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' 'void (...) noexcept' +// CHECK-BINDING-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int' @@ -209,8 +209,8 @@ RESOURCE Buffer; // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' 'void (...) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int' @@ -222,8 +222,8 @@ RESOURCE Buffer; // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__counter_handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' 'void (...) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int) noexcept' // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'counterOrderId' 'unsigned int' @@ -246,8 +246,8 @@ RESOURCE Buffer; // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' 'void (...) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int' @@ -259,8 +259,8 @@ RESOURCE Buffer; // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__counter_handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' 'void (...) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int) noexcept' +// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int) noexcept' // CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'counterOrderId' 'unsigned int' @@ -332,8 +332,8 @@ RESOURCE Buffer; // CHECK-COUNTER-NEXT: CompoundStmt // CHECK-COUNTER-NEXT: ReturnStmt // CHECK-COUNTER-NEXT: CallExpr {{.*}} 'unsigned int' -// CHECK-COUNTER-NEXT: ImplicitCastExpr {{.*}} -// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (...) noexcept' +// CHECK-COUNTER-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' +// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept' // CHECK-COUNTER-NEXT: MemberExpr {{.*}} '__hlsl_resource_t // CHECK-COUNTER-SAME{LITERAL}: [[hlsl::resource_class(UAV)]] // CHECK-COUNTER-SAME{LITERAL}: [[hlsl::raw_buffer]] @@ -348,8 +348,8 @@ RESOURCE Buffer; // CHECK-COUNTER-NEXT: CompoundStmt // CHECK-COUNTER-NEXT: ReturnStmt // CHECK-COUNTER-NEXT: CallExpr {{.*}} 'unsigned int' -// CHECK-COUNTER-NEXT: ImplicitCastExpr {{.*}} -// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (...) noexcept' +// CHECK-COUNTER-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' +// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept' // CHECK-COUNTER-NEXT: MemberExpr {{.*}} '__hlsl_resource_t // CHECK-COUNTER-SAME{LITERAL}: [[hlsl::resource_class(UAV)]] // CHECK-COUNTER-SAME{LITERAL}: [[hlsl::raw_buffer]] @@ -374,8 +374,8 @@ RESOURCE Buffer; // CHECK-APPEND-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__handle // CHECK-APPEND-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-APPEND-NEXT: CallExpr {{.*}} 'unsigned int' -// CHECK-APPEND-NEXT: ImplicitCastExpr {{.*}} -// CHECK-APPEND-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (...) noexcept' +// CHECK-APPEND-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' +// CHECK-APPEND-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept' // CHECK-APPEND-NEXT: MemberExpr {{.*}} '__hlsl_resource_t // CHECK-APPEND-SAME{LITERAL}: [[hlsl::resource_class(UAV)]] // CHECK-APPEND-SAME{LITERAL}: [[hlsl::raw_buffer]] @@ -399,8 +399,8 @@ RESOURCE Buffer; // CHECK-CONSUME-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__handle // CHECK-CONSUME-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-CONSUME-NEXT: CallExpr {{.*}} 'unsigned int' -// CHECK-CONSUME-NEXT: ImplicitCastExpr {{.*}} -// CHECK-CONSUME-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (...) noexcept' +// CHECK-CONSUME-NEXT: ImplicitCastExpr {{.*}} 'unsigned int (*)(__hlsl_resource_t, int) noexcept' +// CHECK-CONSUME-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept' // CHECK-CONSUME-NEXT: MemberExpr {{.*}} '__hlsl_resource_t // CHECK-CONSUME-SAME{LITERAL}: [[hlsl::resource_class(UAV)]] // CHECK-CONSUME-SAME{LITERAL}: [[hlsl::raw_buffer]] @@ -417,14 +417,14 @@ RESOURCE Buffer; // CHECK-NEXT: HLSLParamModifierAttr {{.*}} out // CHECK-NEXT: CompoundStmt // CHECK-NEXT: CallExpr {{.*}} 'void' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(__hlsl_resource_t, unsigned int &) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (__hlsl_resource_t, unsigned int &) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}} // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'numStructs' 'unsigned int &__restrict' // CHECK-NEXT: CallExpr {{.*}} 'void' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getstride' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(__hlsl_resource_t, unsigned int &) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getstride' 'void (__hlsl_resource_t, unsigned int &) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}} // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'stride' 'unsigned int &__restrict' diff --git a/clang/test/AST/HLSL/TypedBuffers-AST.hlsl b/clang/test/AST/HLSL/TypedBuffers-AST.hlsl index 14e274d3855ed..4b66faa79662a 100644 --- a/clang/test/AST/HLSL/TypedBuffers-AST.hlsl +++ b/clang/test/AST/HLSL/TypedBuffers-AST.hlsl @@ -72,8 +72,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t -// CHECK-NEXT: ImplicitCastExpr {{.*}} -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' '__hlsl_resource_t (__hlsl_resource_t) noexcept' // CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: AlwaysInlineAttr @@ -119,8 +119,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'registerNo' 'unsigned int' @@ -147,8 +147,8 @@ RESOURCE Buffer; // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: CallExpr {{.*}} '__hlsl_resource_t {{.*}}' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} '__hlsl_resource_t (*)(__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle // CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]' // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'orderId' 'unsigned int' @@ -221,8 +221,8 @@ RESOURCE Buffer; // CHECK-NEXT: HLSLParamModifierAttr {{.*}} out // CHECK-NEXT: CompoundStmt // CHECK-NEXT: CallExpr {{.*}} 'void' -// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(...) noexcept' -// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (...) noexcept' +// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(__hlsl_resource_t, unsigned int &) noexcept' +// CHECK-NEXT: DeclRefExpr {{.*}} '' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (__hlsl_resource_t, unsigned int &) noexcept' // CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}} // CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]' lvalue implicit this // CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' ParmVar {{.*}} 'dim' 'unsigned int &__restrict' diff --git a/clang/test/SemaHLSL/BuiltIns/buffer_update_counter-errors.hlsl b/clang/test/SemaHLSL/BuiltIns/buffer_update_counter-errors.hlsl index 4aa3ac183d3b1..faac8f07b240a 100644 --- a/clang/test/SemaHLSL/BuiltIns/buffer_update_counter-errors.hlsl +++ b/clang/test/SemaHLSL/BuiltIns/buffer_update_counter-errors.hlsl @@ -16,7 +16,7 @@ void test_args(int x, bool b) { // expected-error@+1 {{too many arguments to function call, expected 2, have 3}} __builtin_hlsl_buffer_update_counter(x, x, x); - // expected-error@+1 {{used type 'int' where __hlsl_resource_t is required}} + // expected-error@+1 {{cannot initialize a parameter of type '__hlsl_resource_t' with an lvalue of type 'int'}} __builtin_hlsl_buffer_update_counter(x, x); bad_handle_not_raw_t bad1; @@ -37,7 +37,7 @@ void test_args(int x, bool b) { // expected-error@+1 {{argument 1 must be constant integer 1 or -1}} __builtin_hlsl_buffer_update_counter(res, x); - // expected-error@+1 {{passing 'const char *' to parameter of incompatible type 'int'}} + // expected-error@+1 {{cannot initialize a parameter of type 'int' with an lvalue of type 'const char[2]'}} __builtin_hlsl_buffer_update_counter(res, "1"); // expected-error@+1 {{argument 1 must be constant integer 1 or -1}} diff --git a/clang/utils/TableGen/ClangBuiltinsEmitter.cpp b/clang/utils/TableGen/ClangBuiltinsEmitter.cpp index 352765acf5338..9b6dd37c7a4a9 100644 --- a/clang/utils/TableGen/ClangBuiltinsEmitter.cpp +++ b/clang/utils/TableGen/ClangBuiltinsEmitter.cpp @@ -330,6 +330,7 @@ class PrototypeParser { .Case("__builtin_va_list", "a") .Case("__float128", "LLd") .Case("__fp16", "h") + .Case("__hlsl_resource_t", "Qr") .Case("__int128_t", "LLLi") .Case("_Float16", "x") .Case("__bf16", "y") From e99c83ff38b006f12b78704c8e9b9751bf100659 Mon Sep 17 00:00:00 2001 From: Michael Buch Date: Wed, 19 Nov 2025 22:57:39 +0000 Subject: [PATCH 41/48] [llvm][DebugInfo] Add support for _BitInt in DWARFTypePrinter (#168382) As of recent, LLVM includes the bit-size as a `DW_AT_bit_size` (and as part of `DW_AT_name`) of `_BitInt`s in DWARF. This allows us to mark `_BitInt`s as "reconstitutable" when compiling with `-gsimple-template-names`. However, before doing so we need to make sure the `DWARFTypePrinter` can reconstruct template parameter values that have `_BitInt` type. This patch adds support for printing `DW_TAG_template_value_parameter`s that have `_BitInt` type. Since `-gsimple-template-names` only omits template parameters that are `<= 64` bit wide, we don't support `_BitInt`s larger than 64 bits. --- .../Inputs/simplified_template_names.cpp | 8 +- .../llvm/DebugInfo/DWARF/DWARFTypePrinter.h | 43 +- .../X86/simplified-template-names.s | 11784 ++++++++-------- 3 files changed, 6087 insertions(+), 5748 deletions(-) diff --git a/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/Inputs/simplified_template_names.cpp b/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/Inputs/simplified_template_names.cpp index 344005ee98141..6f7ef16d686e5 100644 --- a/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/Inputs/simplified_template_names.cpp +++ b/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/Inputs/simplified_template_names.cpp @@ -95,6 +95,8 @@ struct t12 { template void f10() {} +template void f11() {} + int main() { struct { } A; @@ -239,8 +241,10 @@ int main() { f1(); operator_not_really(); t12 v4; - f1<_BitInt(3)>(); - f1(); + f11<_BitInt(3), 2>(); + f11(); + f11<_BitInt(65), 2>(); + f11(); f1, t1<>)>(); f1::*>(); void fcc() __attribute__((swiftcall)); diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h index a760f773055d2..9108c718c4794 100644 --- a/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h +++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h @@ -78,6 +78,12 @@ template struct DWARFTypePrinter { } return false; } + + /// If FormValue is a valid constant Form, print into \c OS the integral value + /// casted to the type referred to by \c Cast. + template + void appendCastedValue(const FormValueType &FormValue, DieType Cast, + bool IsUnsigned); }; template @@ -413,6 +419,31 @@ DieType DWARFTypePrinter::appendQualifiedNameBefore(DieType D) { return appendUnqualifiedNameBefore(D); } +template +template +void DWARFTypePrinter::appendCastedValue( + const FormValueType &FormValue, DieType Cast, bool IsUnsigned) { + std::string ValStr; + if (IsUnsigned) { + std::optional UVal = FormValue.getAsUnsignedConstant(); + if (!UVal) + return; + + ValStr = std::to_string(*UVal); + } else { + std::optional SVal = FormValue.getAsSignedConstant(); + if (!SVal) + return; + + ValStr = std::to_string(*SVal); + } + + OS << '('; + appendQualifiedName(Cast); + OS << ')'; + OS << std::move(ValStr); +} + template bool DWARFTypePrinter::appendTemplateParameters(DieType D, bool *FirstParameter) { @@ -438,13 +469,11 @@ bool DWARFTypePrinter::appendTemplateParameters(DieType D, DieType T = detail::resolveReferencedType(C); Sep(); if (T.getTag() == dwarf::DW_TAG_enumeration_type) { - OS << '('; - appendQualifiedName(T); - OS << ')'; auto V = C.find(dwarf::DW_AT_const_value); - OS << std::to_string(*V->getAsSignedConstant()); + appendCastedValue(*V, T, /*IsUnsigned=*/false); continue; } + // /Maybe/ we could do pointer/reference type parameters, looking for the // symbol in the ELF symbol table to get back to the variable... // but probably not worth it. @@ -539,6 +568,12 @@ bool DWARFTypePrinter::appendTemplateParameters(DieType D, else OS << llvm::format("'\\U%08" PRIx64 "'", Val); } + // FIXME: Handle _BitInt's larger than 64-bits which are emitted as + // block data. + } else if (Name.starts_with("_BitInt")) { + appendCastedValue(*V, T, /*IsUnsigned=*/false); + } else if (Name.starts_with("unsigned _BitInt")) { + appendCastedValue(*V, T, /*IsUnsigned=*/true); } continue; } diff --git a/llvm/test/tools/llvm-dwarfdump/X86/simplified-template-names.s b/llvm/test/tools/llvm-dwarfdump/X86/simplified-template-names.s index 73e713398545c..d87c038ae39b0 100644 --- a/llvm/test/tools/llvm-dwarfdump/X86/simplified-template-names.s +++ b/llvm/test/tools/llvm-dwarfdump/X86/simplified-template-names.s @@ -2,28 +2,23 @@ # RUN: | llvm-dwarfdump --verify - | FileCheck %s # Checking the LLVM side of cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp -# Compile that file with `-g -Xclang -gsimple-template-names=mangled -Xclang -debug-forward-template-params -S -std=c++20` +# Compile that file with `-g -Xclang -gsimple-template-names=mangled -Xclang -debug-forward-template-params -S -std=c++20 -target x86_64-linux` # to (re)generate this assembly file - while it might be slightly overkill in # some ways, it seems small/simple enough to keep this as an exact match for # that end to end test. # CHECK: No errors. - .text .file "simplified_template_names.cpp" - .file 0 "/usr/local/google/home/blaikie/dev/llvm/src" "cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp" md5 0x32ddf5ad86a2fc516a43ad9a2b034228 - .file 1 "/usr" "include/x86_64-linux-gnu/bits/types.h" md5 0x58b79843d97f4309eefa4aa722dac91e - .file 2 "/usr" "include/x86_64-linux-gnu/bits/stdint-intn.h" md5 0xb26974ec56196748bbc399ee826d2a0e - .file 3 "/usr" "lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/cstdint" - .file 4 "/usr" "include/stdint.h" md5 0x8e56ab3ccd56760d8ae9848ebf326071 - .file 5 "/usr" "include/x86_64-linux-gnu/bits/stdint-uintn.h" md5 0x3d2fbc5d847dd222c2fbd70457568436 + .file 0 "/Users/michaelbuch/Git/llvm-worktrees/main" "cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp" md5 0x0d97d46dd4360733206888e9ffc9e7e6 + .text .globl _Zli5_suffy # -- Begin function _Zli5_suffy - .p2align 4, 0x90 + .p2align 4 .type _Zli5_suffy,@function _Zli5_suffy: # @_Zli5_suffy .Lfunc_begin0: - .loc 0 142 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:142:0 + .loc 0 144 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:144:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -31,7 +26,7 @@ _Zli5_suffy: # @_Zli5_suffy .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp0: - .loc 0 142 44 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:142:44 + .loc 0 144 44 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:144:44 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -41,343 +36,352 @@ _Zli5_suffy: # @_Zli5_suffy .cfi_endproc # -- End function .globl main # -- Begin function main - .p2align 4, 0x90 + .p2align 4 .type main,@function main: # @main .Lfunc_begin1: - .loc 0 182 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:182:0 + .loc 0 190 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:190:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp - subq $64, %rsp + subq $16, %rsp .Ltmp2: - .loc 0 184 8 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:8 + .loc 0 192 8 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:8 movb .L__const.main.L(%rip), %al - movb %al, -16(%rbp) - .loc 0 185 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:185:3 + movb %al, -2(%rbp) + .loc 0 193 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:193:3 callq _Z2f1IJiEEvv - .loc 0 186 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:186:3 + .loc 0 194 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:194:3 callq _Z2f1IJfEEvv - .loc 0 187 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:187:3 + .loc 0 195 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:195:3 callq _Z2f1IJbEEvv - .loc 0 188 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:3 + .loc 0 196 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:196:3 callq _Z2f1IJdEEvv - .loc 0 189 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:189:3 + .loc 0 197 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:197:3 callq _Z2f1IJlEEvv - .loc 0 190 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:190:3 + .loc 0 198 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:198:3 callq _Z2f1IJsEEvv - .loc 0 191 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3 + .loc 0 199 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:199:3 callq _Z2f1IJjEEvv - .loc 0 192 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:3 + .loc 0 200 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:200:3 callq _Z2f1IJyEEvv - .loc 0 193 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:193:3 + .loc 0 201 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:201:3 callq _Z2f1IJxEEvv - .loc 0 194 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:194:3 + .loc 0 202 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:202:3 callq _Z2f1IJ3udtEEvv - .loc 0 195 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:195:3 + .loc 0 203 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:203:3 callq _Z2f1IJN2ns3udtEEEvv - .loc 0 196 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:196:3 + .loc 0 204 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:204:3 callq _Z2f1IJPN2ns3udtEEEvv - .loc 0 197 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:197:3 + .loc 0 205 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:205:3 callq _Z2f1IJN2ns5inner3udtEEEvv - .loc 0 198 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:198:3 + .loc 0 206 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:206:3 callq _Z2f1IJ2t1IJiEEEEvv - .loc 0 199 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:199:3 + .loc 0 207 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:207:3 callq _Z2f1IJifEEvv - .loc 0 200 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:200:3 + .loc 0 208 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:208:3 callq _Z2f1IJPiEEvv - .loc 0 201 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:201:3 + .loc 0 209 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:209:3 callq _Z2f1IJRiEEvv - .loc 0 202 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:202:3 + .loc 0 210 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:210:3 callq _Z2f1IJOiEEvv - .loc 0 203 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:203:3 + .loc 0 211 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:211:3 callq _Z2f1IJKiEEvv - .loc 0 204 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:204:3 + .loc 0 212 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:212:3 callq _Z2f1IJA3_iEEvv - .loc 0 205 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:205:3 + .loc 0 213 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:213:3 callq _Z2f1IJvEEvv - .loc 0 206 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:206:3 + .loc 0 214 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:214:3 callq _Z2f1IJN11outer_class11inner_classEEEvv - .loc 0 207 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:207:3 + .loc 0 215 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:215:3 callq _Z2f1IJmEEvv - .loc 0 208 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:208:3 + .loc 0 216 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:216:3 callq _Z2f2ILb1ELi3EEvv - .loc 0 209 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:209:3 - callq _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv - .loc 0 210 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:210:3 - callq _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv - .loc 0 211 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:211:3 - callq _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv - .loc 0 212 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:212:3 - callq _Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv - .loc 0 213 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:213:3 - callq _Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv - .loc 0 214 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:214:3 - callq _Z2f3IPiJXadL_Z1iEEEEvv - .loc 0 215 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:215:3 - callq _Z2f3IPiJLS0_0EEEvv .loc 0 217 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:217:3 - callq _Z2f3ImJLm1EEEvv + callq _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv .loc 0 218 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:218:3 - callq _Z2f3IyJLy1EEEvv + callq _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv .loc 0 219 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:219:3 - callq _Z2f3IlJLl1EEEvv + callq _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv .loc 0 220 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:220:3 - callq _Z2f3IjJLj1EEEvv + callq _Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv .loc 0 221 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:221:3 - callq _Z2f3IsJLs1EEEvv + callq _Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv .loc 0 222 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:222:3 - callq _Z2f3IhJLh0EEEvv + callq _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv .loc 0 223 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:223:3 - callq _Z2f3IaJLa0EEEvv - .loc 0 224 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:224:3 - callq _Z2f3ItJLt1ELt2EEEvv + callq _Z2f3IPiTpTnT_JLS0_0EEEvv .loc 0 225 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:225:3 - callq _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv + callq _Z2f3ImTpTnT_JLm1EEEvv .loc 0 226 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:226:3 - callq _Z2f3InJLn18446744073709551614EEEvv + callq _Z2f3IyTpTnT_JLy1EEEvv .loc 0 227 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:227:3 - callq _Z2f4IjLj3EEvv + callq _Z2f3IlTpTnT_JLl1EEEvv .loc 0 228 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:228:3 - callq _Z2f1IJ2t3IiLb0EEEEvv + callq _Z2f3IjTpTnT_JLj1EEEvv .loc 0 229 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:229:3 - callq _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv + callq _Z2f3IsTpTnT_JLs1EEEvv .loc 0 230 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:230:3 - callq _Z2f1IJZ4mainE3$_1EEvv + callq _Z2f3IhTpTnT_JLh0EEEvv + .loc 0 231 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:231:3 + callq _Z2f3IaTpTnT_JLa0EEEvv .loc 0 232 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:232:3 - callq _Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv + callq _Z2f3ItTpTnT_JLt1ELt2EEEvv .loc 0 233 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:233:3 - callq _Z2f1IJFifEEEvv + callq _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv .loc 0 234 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:234:3 - callq _Z2f1IJFvzEEEvv + callq _Z2f3InTpTnT_JLn18446744073709551614EEEvv .loc 0 235 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:235:3 - callq _Z2f1IJFvizEEEvv + callq _Z2f4IjLj3EEvv .loc 0 236 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:236:3 - callq _Z2f1IJRKiEEvv + callq _Z2f1IJ2t3IiLb0EEEEvv .loc 0 237 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:237:3 - callq _Z2f1IJRPKiEEvv + callq _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv .loc 0 238 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:238:3 - callq _Z2f1IJN12_GLOBAL__N_12t5EEEvv - .loc 0 239 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:239:3 - callq _Z2f1IJDnEEvv + callq _Z2f1IJZ4mainE3$_0EEvv .loc 0 240 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:240:3 - callq _Z2f1IJPlS0_EEvv + callq _Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv .loc 0 241 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:241:3 - callq _Z2f1IJPlP3udtEEvv + callq _Z2f1IJFifEEEvv .loc 0 242 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:242:3 - callq _Z2f1IJKPvEEvv + callq _Z2f1IJFvzEEEvv .loc 0 243 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:243:3 - callq _Z2f1IJPKPKvEEvv + callq _Z2f1IJFvizEEEvv .loc 0 244 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:244:3 - callq _Z2f1IJFvvEEEvv + callq _Z2f1IJRKiEEvv .loc 0 245 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:245:3 - callq _Z2f1IJPFvvEEEvv + callq _Z2f1IJRPKiEEvv .loc 0 246 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:246:3 - callq _Z2f1IJPZ4mainE3$_1EEvv + callq _Z2f1IJN12_GLOBAL__N_12t5EEEvv .loc 0 247 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:247:3 - callq _Z2f1IJZ4mainE3$_2EEvv + callq _Z2f1IJDnEEvv .loc 0 248 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:248:3 - callq _Z2f1IJPZ4mainE3$_2EEvv + callq _Z2f1IJPlS0_EEvv .loc 0 249 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:249:3 - callq _Z2f5IJ2t1IJiEEEiEvv + callq _Z2f1IJPlP3udtEEvv .loc 0 250 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:250:3 - callq _Z2f5IJEiEvv + callq _Z2f1IJKPvEEvv .loc 0 251 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:251:3 - callq _Z2f6I2t1IJiEEJEEvv + callq _Z2f1IJPKPKvEEvv .loc 0 252 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:252:3 - callq _Z2f1IJEEvv + callq _Z2f1IJFvvEEEvv .loc 0 253 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:253:3 - callq _Z2f1IJPKvS1_EEvv + callq _Z2f1IJPFvvEEEvv .loc 0 254 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:254:3 - callq _Z2f1IJP2t1IJPiEEEEvv + callq _Z2f1IJPZ4mainE3$_0EEvv .loc 0 255 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:255:3 + callq _Z2f1IJZ4mainE3$_1EEvv + .loc 0 256 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:256:3 + callq _Z2f1IJPZ4mainE3$_1EEvv + .loc 0 257 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:257:3 + callq _Z2f5IJ2t1IJiEEEiEvv + .loc 0 258 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:258:3 + callq _Z2f5IJEiEvv + .loc 0 259 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:259:3 + callq _Z2f6I2t1IJiEEJEEvv + .loc 0 260 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:260:3 + callq _Z2f1IJEEvv + .loc 0 261 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:261:3 + callq _Z2f1IJPKvS1_EEvv + .loc 0 262 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:262:3 + callq _Z2f1IJP2t1IJPiEEEEvv + .loc 0 263 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:263:3 callq _Z2f1IJA_PiEEvv - .loc 0 257 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:257:6 - leaq -40(%rbp), %rdi + .loc 0 265 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:265:6 + leaq -5(%rbp), %rdi movl $1, %esi callq _ZN2t6lsIiEEvi - .loc 0 258 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:258:6 - leaq -40(%rbp), %rdi + .loc 0 266 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:266:6 + leaq -5(%rbp), %rdi movl $1, %esi callq _ZN2t6ltIiEEvi - .loc 0 259 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:259:6 - leaq -40(%rbp), %rdi + .loc 0 267 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:267:6 + leaq -5(%rbp), %rdi movl $1, %esi callq _ZN2t6leIiEEvi - .loc 0 260 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:260:6 - leaq -40(%rbp), %rdi + .loc 0 268 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:268:6 + leaq -5(%rbp), %rdi callq _ZN2t6cvP2t1IJfEEIiEEv - .loc 0 261 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:261:6 - leaq -40(%rbp), %rdi + .loc 0 269 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:269:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6miIiEEvi - .loc 0 262 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:262:6 - leaq -40(%rbp), %rdi + .loc 0 270 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:270:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6mlIiEEvi - .loc 0 263 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:263:6 - leaq -40(%rbp), %rdi + .loc 0 271 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:271:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6dvIiEEvi - .loc 0 264 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:264:6 - leaq -40(%rbp), %rdi + .loc 0 272 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:272:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6rmIiEEvi - .loc 0 265 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:265:6 - leaq -40(%rbp), %rdi + .loc 0 273 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:273:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6eoIiEEvi - .loc 0 266 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:266:6 - leaq -40(%rbp), %rdi + .loc 0 274 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:274:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6anIiEEvi - .loc 0 267 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:267:6 - leaq -40(%rbp), %rdi + .loc 0 275 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:275:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6orIiEEvi - .loc 0 268 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:268:6 - leaq -40(%rbp), %rdi + .loc 0 276 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:276:6 + leaq -5(%rbp), %rdi callq _ZN2t6coIiEEvv - .loc 0 269 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:269:6 - leaq -40(%rbp), %rdi + .loc 0 277 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:277:6 + leaq -5(%rbp), %rdi callq _ZN2t6ntIiEEvv - .loc 0 270 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:270:6 - leaq -40(%rbp), %rdi + .loc 0 278 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:278:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6aSIiEEvi - .loc 0 271 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:271:6 - leaq -40(%rbp), %rdi + .loc 0 279 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:279:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6gtIiEEvi - .loc 0 272 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:272:6 - leaq -40(%rbp), %rdi + .loc 0 280 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:280:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6cmIiEEvi - .loc 0 273 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:273:6 - leaq -40(%rbp), %rdi + .loc 0 281 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:281:6 + leaq -5(%rbp), %rdi callq _ZN2t6clIiEEvv - .loc 0 274 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:274:6 - leaq -40(%rbp), %rdi + .loc 0 282 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:282:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6ixIiEEvi - .loc 0 275 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:275:6 - leaq -40(%rbp), %rdi + .loc 0 283 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:283:6 + leaq -5(%rbp), %rdi movl $3, %esi callq _ZN2t6ssIiEEvi - .loc 0 276 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:276:3 + .loc 0 284 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:284:3 xorl %eax, %eax movl %eax, %edi xorl %esi, %esi callq _ZN2t6nwIiEEPvmT_ - .loc 0 277 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:277:3 + .loc 0 285 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:285:3 xorl %eax, %eax movl %eax, %edi xorl %esi, %esi callq _ZN2t6naIiEEPvmT_ - .loc 0 278 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:278:3 + .loc 0 286 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:286:3 xorl %eax, %eax movl %eax, %edi xorl %esi, %esi callq _ZN2t6dlIiEEvPvT_ - .loc 0 279 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:279:3 + .loc 0 287 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:287:3 xorl %eax, %eax movl %eax, %edi xorl %esi, %esi callq _ZN2t6daIiEEvPvT_ - .loc 0 280 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:280:6 - leaq -40(%rbp), %rdi + .loc 0 288 6 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:288:6 + leaq -5(%rbp), %rdi callq _ZN2t6awIiEEiv - .loc 0 281 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:281:3 + .loc 0 289 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:289:3 movl $42, %edi callq _Zli5_suffy - .loc 0 283 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:283:3 + .loc 0 291 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:291:3 callq _Z2f1IJZ4mainE2t7EEvv - .loc 0 284 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:284:3 + .loc 0 292 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:292:3 callq _Z2f1IJRA3_iEEvv - .loc 0 285 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:285:3 + .loc 0 293 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:293:3 callq _Z2f1IJPA3_iEEvv - .loc 0 286 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:286:3 + .loc 0 294 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:294:3 callq _Z2f7I2t1Evv - .loc 0 287 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:287:3 + .loc 0 295 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:295:3 callq _Z2f8I2t1iEvv - .loc 0 289 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:289:3 + .loc 0 297 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:297:3 callq _ZN2ns8ttp_userINS_5inner3ttpEEEvv - .loc 0 290 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:290:3 + .loc 0 298 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:298:3 callq _Z2f1IJPiPDnEEvv - .loc 0 292 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:292:3 + .loc 0 300 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:300:3 callq _Z2f1IJ2t7IiEEEvv - .loc 0 293 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:293:3 - callq _Z2f7IN2ns3inl2t9EEvv - .loc 0 294 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:294:3 + .loc 0 301 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:301:3 + callq _Z2f7ITtTpTyEN2ns3inl2t9EEvv + .loc 0 302 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:302:3 callq _Z2f1IJU7_AtomiciEEvv - .loc 0 295 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:295:3 + .loc 0 303 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:303:3 callq _Z2f1IJilVcEEvv - .loc 0 296 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:296:3 + .loc 0 304 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:304:3 callq _Z2f1IJDv2_iEEvv - .loc 0 297 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:297:3 + .loc 0 305 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:305:3 callq _Z2f1IJVKPiEEvv - .loc 0 298 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:298:3 + .loc 0 306 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:306:3 callq _Z2f1IJVKvEEvv - .loc 0 299 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:299:3 - callq _Z2f1IJ2t1IJZ4mainE3$_1EEEEvv - .loc 0 300 7 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:300:7 - leaq -56(%rbp), %rdi + .loc 0 307 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:307:3 + callq _Z2f1IJ2t1IJZ4mainE3$_0EEEEvv + .loc 0 308 7 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:308:7 + leaq -7(%rbp), %rdi callq _ZN3t10C2IvEEv - .loc 0 301 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:301:3 + .loc 0 309 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:309:3 callq _Z2f1IJM3udtKFvvEEEvv - .loc 0 302 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:302:3 + .loc 0 310 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:310:3 callq _Z2f1IJM3udtVFvvREEEvv - .loc 0 303 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:303:3 + .loc 0 311 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:311:3 callq _Z2f1IJM3udtVKFvvOEEEvv - .loc 0 304 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:304:3 + .loc 0 312 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:312:3 callq _Z2f9IiEPFvvEv - .loc 0 305 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:305:3 + .loc 0 313 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:313:3 callq _Z2f1IJKPFvvEEEvv - .loc 0 306 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:306:3 + .loc 0 314 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:314:3 callq _Z2f1IJRA1_KcEEvv - .loc 0 307 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:307:3 + .loc 0 315 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:315:3 callq _Z2f1IJKFvvREEEvv - .loc 0 308 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:308:3 + .loc 0 316 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:316:3 callq _Z2f1IJVFvvOEEEvv - .loc 0 309 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:309:3 + .loc 0 317 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:317:3 callq _Z2f1IJVKFvvEEEvv - .loc 0 310 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:310:3 + .loc 0 318 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:318:3 callq _Z2f1IJA1_KPiEEvv - .loc 0 311 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:311:3 + .loc 0 319 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:319:3 callq _Z2f1IJRA1_KPiEEvv - .loc 0 312 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:312:3 + .loc 0 320 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:320:3 callq _Z2f1IJRKM3udtFvvEEEvv - .loc 0 313 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:313:3 + .loc 0 321 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:321:3 callq _Z2f1IJFPFvfEiEEEvv - .loc 0 314 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:314:3 + .loc 0 322 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:322:3 callq _Z2f1IJA1_2t1IJiEEEEvv - .loc 0 315 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:315:3 + .loc 0 323 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:323:3 callq _Z2f1IJPDoFvvEEEvv - .loc 0 316 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:316:3 - callq _Z2f1IJFvZ4mainE3$_2EEEvv - .loc 0 318 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:318:3 - callq _Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv - .loc 0 319 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:319:3 + .loc 0 324 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:324:3 + callq _Z2f1IJFvZ4mainE3$_1EEEvv + .loc 0 326 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:326:3 + callq _Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv + .loc 0 327 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:327:3 callq _Z2f1IJFvZ4mainE2t8EEEvv - .loc 0 320 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:320:3 + .loc 0 328 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:328:3 callq _Z19operator_not_reallyIiEvv - .loc 0 322 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:322:3 - callq _Z2f1IJDB3_EEvv - .loc 0 323 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:323:3 - callq _Z2f1IJKDU5_EEvv - .loc 0 324 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:324:3 + .loc 0 330 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:330:3 + callq _Z3f11IDB3_TnT_LS0_2EEvv + .loc 0 331 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:331:3 + callq _Z3f11IKDU5_TnT_LS0_2EEvv + .loc 0 332 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:332:3 + callq _Z3f11IDB65_TnT_LS0_2EEvv + .loc 0 333 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:333:3 + callq _Z3f11IKDU65_TnT_LS0_2EEvv + .loc 0 334 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:334:3 callq _Z2f1IJFv2t1IJEES1_EEEvv - .loc 0 325 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:325:3 + .loc 0 335 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:335:3 callq _Z2f1IJM2t1IJEEiEEvv - .loc 0 327 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:327:3 + .loc 0 337 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:337:3 callq _Z2f1IJU9swiftcallFvvEEEvv - .loc 0 328 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:328:1 + .loc 0 339 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:339:3 + callq _Z2f1IJFivEEEvv + .loc 0 340 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:340:3 + callq _Z3f10ILN2ns3$_0E0EEvv + .loc 0 341 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:341:1 xorl %eax, %eax - addq $64, %rsp + .loc 0 341 1 epilogue_begin is_stmt 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:341:1 + addq $16, %rsp popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -388,20 +392,20 @@ main: # @main # -- End function .section .text._Z2f1IJiEEvv,"axG",@progbits,_Z2f1IJiEEvv,comdat .weak _Z2f1IJiEEvv # -- Begin function _Z2f1IJiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJiEEvv,@function _Z2f1IJiEEvv: # @_Z2f1IJiEEvv .Lfunc_begin2: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 is_stmt 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp4: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -412,20 +416,20 @@ _Z2f1IJiEEvv: # @_Z2f1IJiEEvv # -- End function .section .text._Z2f1IJfEEvv,"axG",@progbits,_Z2f1IJfEEvv,comdat .weak _Z2f1IJfEEvv # -- Begin function _Z2f1IJfEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJfEEvv,@function _Z2f1IJfEEvv: # @_Z2f1IJfEEvv .Lfunc_begin3: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp6: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -436,20 +440,20 @@ _Z2f1IJfEEvv: # @_Z2f1IJfEEvv # -- End function .section .text._Z2f1IJbEEvv,"axG",@progbits,_Z2f1IJbEEvv,comdat .weak _Z2f1IJbEEvv # -- Begin function _Z2f1IJbEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJbEEvv,@function _Z2f1IJbEEvv: # @_Z2f1IJbEEvv .Lfunc_begin4: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp8: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -460,20 +464,20 @@ _Z2f1IJbEEvv: # @_Z2f1IJbEEvv # -- End function .section .text._Z2f1IJdEEvv,"axG",@progbits,_Z2f1IJdEEvv,comdat .weak _Z2f1IJdEEvv # -- Begin function _Z2f1IJdEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJdEEvv,@function _Z2f1IJdEEvv: # @_Z2f1IJdEEvv .Lfunc_begin5: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp10: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -484,20 +488,20 @@ _Z2f1IJdEEvv: # @_Z2f1IJdEEvv # -- End function .section .text._Z2f1IJlEEvv,"axG",@progbits,_Z2f1IJlEEvv,comdat .weak _Z2f1IJlEEvv # -- Begin function _Z2f1IJlEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJlEEvv,@function _Z2f1IJlEEvv: # @_Z2f1IJlEEvv .Lfunc_begin6: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp12: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -508,20 +512,20 @@ _Z2f1IJlEEvv: # @_Z2f1IJlEEvv # -- End function .section .text._Z2f1IJsEEvv,"axG",@progbits,_Z2f1IJsEEvv,comdat .weak _Z2f1IJsEEvv # -- Begin function _Z2f1IJsEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJsEEvv,@function _Z2f1IJsEEvv: # @_Z2f1IJsEEvv .Lfunc_begin7: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp14: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -532,20 +536,20 @@ _Z2f1IJsEEvv: # @_Z2f1IJsEEvv # -- End function .section .text._Z2f1IJjEEvv,"axG",@progbits,_Z2f1IJjEEvv,comdat .weak _Z2f1IJjEEvv # -- Begin function _Z2f1IJjEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJjEEvv,@function _Z2f1IJjEEvv: # @_Z2f1IJjEEvv .Lfunc_begin8: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp16: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -556,20 +560,20 @@ _Z2f1IJjEEvv: # @_Z2f1IJjEEvv # -- End function .section .text._Z2f1IJyEEvv,"axG",@progbits,_Z2f1IJyEEvv,comdat .weak _Z2f1IJyEEvv # -- Begin function _Z2f1IJyEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJyEEvv,@function _Z2f1IJyEEvv: # @_Z2f1IJyEEvv .Lfunc_begin9: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp18: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -580,20 +584,20 @@ _Z2f1IJyEEvv: # @_Z2f1IJyEEvv # -- End function .section .text._Z2f1IJxEEvv,"axG",@progbits,_Z2f1IJxEEvv,comdat .weak _Z2f1IJxEEvv # -- Begin function _Z2f1IJxEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJxEEvv,@function _Z2f1IJxEEvv: # @_Z2f1IJxEEvv .Lfunc_begin10: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp20: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -604,20 +608,20 @@ _Z2f1IJxEEvv: # @_Z2f1IJxEEvv # -- End function .section .text._Z2f1IJ3udtEEvv,"axG",@progbits,_Z2f1IJ3udtEEvv,comdat .weak _Z2f1IJ3udtEEvv # -- Begin function _Z2f1IJ3udtEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJ3udtEEvv,@function _Z2f1IJ3udtEEvv: # @_Z2f1IJ3udtEEvv .Lfunc_begin11: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp22: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -628,20 +632,20 @@ _Z2f1IJ3udtEEvv: # @_Z2f1IJ3udtEEvv # -- End function .section .text._Z2f1IJN2ns3udtEEEvv,"axG",@progbits,_Z2f1IJN2ns3udtEEEvv,comdat .weak _Z2f1IJN2ns3udtEEEvv # -- Begin function _Z2f1IJN2ns3udtEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJN2ns3udtEEEvv,@function _Z2f1IJN2ns3udtEEEvv: # @_Z2f1IJN2ns3udtEEEvv .Lfunc_begin12: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp24: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -652,20 +656,20 @@ _Z2f1IJN2ns3udtEEEvv: # @_Z2f1IJN2ns3udtEEEvv # -- End function .section .text._Z2f1IJPN2ns3udtEEEvv,"axG",@progbits,_Z2f1IJPN2ns3udtEEEvv,comdat .weak _Z2f1IJPN2ns3udtEEEvv # -- Begin function _Z2f1IJPN2ns3udtEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPN2ns3udtEEEvv,@function _Z2f1IJPN2ns3udtEEEvv: # @_Z2f1IJPN2ns3udtEEEvv .Lfunc_begin13: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp26: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -676,20 +680,20 @@ _Z2f1IJPN2ns3udtEEEvv: # @_Z2f1IJPN2ns3udtEEEvv # -- End function .section .text._Z2f1IJN2ns5inner3udtEEEvv,"axG",@progbits,_Z2f1IJN2ns5inner3udtEEEvv,comdat .weak _Z2f1IJN2ns5inner3udtEEEvv # -- Begin function _Z2f1IJN2ns5inner3udtEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJN2ns5inner3udtEEEvv,@function _Z2f1IJN2ns5inner3udtEEEvv: # @_Z2f1IJN2ns5inner3udtEEEvv .Lfunc_begin14: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp28: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -700,20 +704,20 @@ _Z2f1IJN2ns5inner3udtEEEvv: # @_Z2f1IJN2ns5inner3udtEEEvv # -- End function .section .text._Z2f1IJ2t1IJiEEEEvv,"axG",@progbits,_Z2f1IJ2t1IJiEEEEvv,comdat .weak _Z2f1IJ2t1IJiEEEEvv # -- Begin function _Z2f1IJ2t1IJiEEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJ2t1IJiEEEEvv,@function _Z2f1IJ2t1IJiEEEEvv: # @_Z2f1IJ2t1IJiEEEEvv .Lfunc_begin15: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp30: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -724,20 +728,20 @@ _Z2f1IJ2t1IJiEEEEvv: # @_Z2f1IJ2t1IJiEEEEvv # -- End function .section .text._Z2f1IJifEEvv,"axG",@progbits,_Z2f1IJifEEvv,comdat .weak _Z2f1IJifEEvv # -- Begin function _Z2f1IJifEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJifEEvv,@function _Z2f1IJifEEvv: # @_Z2f1IJifEEvv .Lfunc_begin16: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp32: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -748,20 +752,20 @@ _Z2f1IJifEEvv: # @_Z2f1IJifEEvv # -- End function .section .text._Z2f1IJPiEEvv,"axG",@progbits,_Z2f1IJPiEEvv,comdat .weak _Z2f1IJPiEEvv # -- Begin function _Z2f1IJPiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPiEEvv,@function _Z2f1IJPiEEvv: # @_Z2f1IJPiEEvv .Lfunc_begin17: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp34: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -772,20 +776,20 @@ _Z2f1IJPiEEvv: # @_Z2f1IJPiEEvv # -- End function .section .text._Z2f1IJRiEEvv,"axG",@progbits,_Z2f1IJRiEEvv,comdat .weak _Z2f1IJRiEEvv # -- Begin function _Z2f1IJRiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRiEEvv,@function _Z2f1IJRiEEvv: # @_Z2f1IJRiEEvv .Lfunc_begin18: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp36: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -796,20 +800,20 @@ _Z2f1IJRiEEvv: # @_Z2f1IJRiEEvv # -- End function .section .text._Z2f1IJOiEEvv,"axG",@progbits,_Z2f1IJOiEEvv,comdat .weak _Z2f1IJOiEEvv # -- Begin function _Z2f1IJOiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJOiEEvv,@function _Z2f1IJOiEEvv: # @_Z2f1IJOiEEvv .Lfunc_begin19: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp38: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -820,20 +824,20 @@ _Z2f1IJOiEEvv: # @_Z2f1IJOiEEvv # -- End function .section .text._Z2f1IJKiEEvv,"axG",@progbits,_Z2f1IJKiEEvv,comdat .weak _Z2f1IJKiEEvv # -- Begin function _Z2f1IJKiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJKiEEvv,@function _Z2f1IJKiEEvv: # @_Z2f1IJKiEEvv .Lfunc_begin20: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp40: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -844,20 +848,20 @@ _Z2f1IJKiEEvv: # @_Z2f1IJKiEEvv # -- End function .section .text._Z2f1IJA3_iEEvv,"axG",@progbits,_Z2f1IJA3_iEEvv,comdat .weak _Z2f1IJA3_iEEvv # -- Begin function _Z2f1IJA3_iEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJA3_iEEvv,@function _Z2f1IJA3_iEEvv: # @_Z2f1IJA3_iEEvv .Lfunc_begin21: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp42: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -868,20 +872,20 @@ _Z2f1IJA3_iEEvv: # @_Z2f1IJA3_iEEvv # -- End function .section .text._Z2f1IJvEEvv,"axG",@progbits,_Z2f1IJvEEvv,comdat .weak _Z2f1IJvEEvv # -- Begin function _Z2f1IJvEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJvEEvv,@function _Z2f1IJvEEvv: # @_Z2f1IJvEEvv .Lfunc_begin22: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp44: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -892,20 +896,20 @@ _Z2f1IJvEEvv: # @_Z2f1IJvEEvv # -- End function .section .text._Z2f1IJN11outer_class11inner_classEEEvv,"axG",@progbits,_Z2f1IJN11outer_class11inner_classEEEvv,comdat .weak _Z2f1IJN11outer_class11inner_classEEEvv # -- Begin function _Z2f1IJN11outer_class11inner_classEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJN11outer_class11inner_classEEEvv,@function _Z2f1IJN11outer_class11inner_classEEEvv: # @_Z2f1IJN11outer_class11inner_classEEEvv .Lfunc_begin23: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp46: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -916,20 +920,20 @@ _Z2f1IJN11outer_class11inner_classEEEvv: # @_Z2f1IJN11outer_class11inner_classEE # -- End function .section .text._Z2f1IJmEEvv,"axG",@progbits,_Z2f1IJmEEvv,comdat .weak _Z2f1IJmEEvv # -- Begin function _Z2f1IJmEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJmEEvv,@function _Z2f1IJmEEvv: # @_Z2f1IJmEEvv .Lfunc_begin24: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp48: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -940,20 +944,20 @@ _Z2f1IJmEEvv: # @_Z2f1IJmEEvv # -- End function .section .text._Z2f2ILb1ELi3EEvv,"axG",@progbits,_Z2f2ILb1ELi3EEvv,comdat .weak _Z2f2ILb1ELi3EEvv # -- Begin function _Z2f2ILb1ELi3EEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f2ILb1ELi3EEvv,@function _Z2f2ILb1ELi3EEvv: # @_Z2f2ILb1ELi3EEvv .Lfunc_begin25: - .loc 0 38 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:0 + .loc 0 40 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:40:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp50: - .loc 0 39 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:39:1 + .loc 0 41 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -962,427 +966,427 @@ _Z2f2ILb1ELi3EEvv: # @_Z2f2ILb1ELi3EEvv .size _Z2f2ILb1ELi3EEvv, .Lfunc_end25-_Z2f2ILb1ELi3EEvv .cfi_endproc # -- End function - .section .text._Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv,"axG",@progbits,_Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv,comdat - .weak _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv # -- Begin function _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv - .p2align 4, 0x90 - .type _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv,@function -_Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv: # @_Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv + .section .text._Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv,"axG",@progbits,_Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv,comdat + .weak _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv # -- Begin function _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv + .p2align 4 + .type _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv,@function +_Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv: # @_Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv .Lfunc_begin26: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp52: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp53: .Lfunc_end26: - .size _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv, .Lfunc_end26-_Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv + .size _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv, .Lfunc_end26-_Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv,"axG",@progbits,_Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv,comdat - .weak _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv # -- Begin function _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv - .p2align 4, 0x90 - .type _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv,@function -_Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv: # @_Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv + .section .text._Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv,"axG",@progbits,_Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv,comdat + .weak _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv # -- Begin function _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv + .p2align 4 + .type _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv,@function +_Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv: # @_Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv .Lfunc_begin27: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp54: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp55: .Lfunc_end27: - .size _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv, .Lfunc_end27-_Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv + .size _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv, .Lfunc_end27-_Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv,"axG",@progbits,_Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv,comdat - .weak _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv # -- Begin function _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv - .p2align 4, 0x90 - .type _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv,@function -_Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv: # @_Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv + .section .text._Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv,"axG",@progbits,_Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv,comdat + .weak _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv # -- Begin function _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv + .p2align 4 + .type _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv,@function +_Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv: # @_Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv .Lfunc_begin28: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp56: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp57: .Lfunc_end28: - .size _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv, .Lfunc_end28-_Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv + .size _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv, .Lfunc_end28-_Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv - .type _Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv,@function -_Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv: # @"_Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv" + .p2align 4 # -- Begin function _Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv + .type _Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv,@function +_Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv: # @"_Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv" .Lfunc_begin29: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp58: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp59: .Lfunc_end29: - .size _Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv, .Lfunc_end29-_Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv + .size _Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv, .Lfunc_end29-_Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv - .type _Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv,@function -_Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv: # @_Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv + .p2align 4 # -- Begin function _Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv + .type _Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv,@function +_Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv: # @_Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv .Lfunc_begin30: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp60: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp61: .Lfunc_end30: - .size _Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv, .Lfunc_end30-_Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv + .size _Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv, .Lfunc_end30-_Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IPiJXadL_Z1iEEEEvv,"axG",@progbits,_Z2f3IPiJXadL_Z1iEEEEvv,comdat - .weak _Z2f3IPiJXadL_Z1iEEEEvv # -- Begin function _Z2f3IPiJXadL_Z1iEEEEvv - .p2align 4, 0x90 - .type _Z2f3IPiJXadL_Z1iEEEEvv,@function -_Z2f3IPiJXadL_Z1iEEEEvv: # @_Z2f3IPiJXadL_Z1iEEEEvv + .section .text._Z2f3IPiTpTnT_JXadL_Z1iEEEEvv,"axG",@progbits,_Z2f3IPiTpTnT_JXadL_Z1iEEEEvv,comdat + .weak _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv # -- Begin function _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv + .p2align 4 + .type _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv,@function +_Z2f3IPiTpTnT_JXadL_Z1iEEEEvv: # @_Z2f3IPiTpTnT_JXadL_Z1iEEEEvv .Lfunc_begin31: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp62: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp63: .Lfunc_end31: - .size _Z2f3IPiJXadL_Z1iEEEEvv, .Lfunc_end31-_Z2f3IPiJXadL_Z1iEEEEvv + .size _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv, .Lfunc_end31-_Z2f3IPiTpTnT_JXadL_Z1iEEEEvv .cfi_endproc # -- End function - .section .text._Z2f3IPiJLS0_0EEEvv,"axG",@progbits,_Z2f3IPiJLS0_0EEEvv,comdat - .weak _Z2f3IPiJLS0_0EEEvv # -- Begin function _Z2f3IPiJLS0_0EEEvv - .p2align 4, 0x90 - .type _Z2f3IPiJLS0_0EEEvv,@function -_Z2f3IPiJLS0_0EEEvv: # @_Z2f3IPiJLS0_0EEEvv + .section .text._Z2f3IPiTpTnT_JLS0_0EEEvv,"axG",@progbits,_Z2f3IPiTpTnT_JLS0_0EEEvv,comdat + .weak _Z2f3IPiTpTnT_JLS0_0EEEvv # -- Begin function _Z2f3IPiTpTnT_JLS0_0EEEvv + .p2align 4 + .type _Z2f3IPiTpTnT_JLS0_0EEEvv,@function +_Z2f3IPiTpTnT_JLS0_0EEEvv: # @_Z2f3IPiTpTnT_JLS0_0EEEvv .Lfunc_begin32: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp64: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp65: .Lfunc_end32: - .size _Z2f3IPiJLS0_0EEEvv, .Lfunc_end32-_Z2f3IPiJLS0_0EEEvv + .size _Z2f3IPiTpTnT_JLS0_0EEEvv, .Lfunc_end32-_Z2f3IPiTpTnT_JLS0_0EEEvv .cfi_endproc # -- End function - .section .text._Z2f3ImJLm1EEEvv,"axG",@progbits,_Z2f3ImJLm1EEEvv,comdat - .weak _Z2f3ImJLm1EEEvv # -- Begin function _Z2f3ImJLm1EEEvv - .p2align 4, 0x90 - .type _Z2f3ImJLm1EEEvv,@function -_Z2f3ImJLm1EEEvv: # @_Z2f3ImJLm1EEEvv + .section .text._Z2f3ImTpTnT_JLm1EEEvv,"axG",@progbits,_Z2f3ImTpTnT_JLm1EEEvv,comdat + .weak _Z2f3ImTpTnT_JLm1EEEvv # -- Begin function _Z2f3ImTpTnT_JLm1EEEvv + .p2align 4 + .type _Z2f3ImTpTnT_JLm1EEEvv,@function +_Z2f3ImTpTnT_JLm1EEEvv: # @_Z2f3ImTpTnT_JLm1EEEvv .Lfunc_begin33: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp66: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp67: .Lfunc_end33: - .size _Z2f3ImJLm1EEEvv, .Lfunc_end33-_Z2f3ImJLm1EEEvv + .size _Z2f3ImTpTnT_JLm1EEEvv, .Lfunc_end33-_Z2f3ImTpTnT_JLm1EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IyJLy1EEEvv,"axG",@progbits,_Z2f3IyJLy1EEEvv,comdat - .weak _Z2f3IyJLy1EEEvv # -- Begin function _Z2f3IyJLy1EEEvv - .p2align 4, 0x90 - .type _Z2f3IyJLy1EEEvv,@function -_Z2f3IyJLy1EEEvv: # @_Z2f3IyJLy1EEEvv + .section .text._Z2f3IyTpTnT_JLy1EEEvv,"axG",@progbits,_Z2f3IyTpTnT_JLy1EEEvv,comdat + .weak _Z2f3IyTpTnT_JLy1EEEvv # -- Begin function _Z2f3IyTpTnT_JLy1EEEvv + .p2align 4 + .type _Z2f3IyTpTnT_JLy1EEEvv,@function +_Z2f3IyTpTnT_JLy1EEEvv: # @_Z2f3IyTpTnT_JLy1EEEvv .Lfunc_begin34: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp68: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp69: .Lfunc_end34: - .size _Z2f3IyJLy1EEEvv, .Lfunc_end34-_Z2f3IyJLy1EEEvv + .size _Z2f3IyTpTnT_JLy1EEEvv, .Lfunc_end34-_Z2f3IyTpTnT_JLy1EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IlJLl1EEEvv,"axG",@progbits,_Z2f3IlJLl1EEEvv,comdat - .weak _Z2f3IlJLl1EEEvv # -- Begin function _Z2f3IlJLl1EEEvv - .p2align 4, 0x90 - .type _Z2f3IlJLl1EEEvv,@function -_Z2f3IlJLl1EEEvv: # @_Z2f3IlJLl1EEEvv + .section .text._Z2f3IlTpTnT_JLl1EEEvv,"axG",@progbits,_Z2f3IlTpTnT_JLl1EEEvv,comdat + .weak _Z2f3IlTpTnT_JLl1EEEvv # -- Begin function _Z2f3IlTpTnT_JLl1EEEvv + .p2align 4 + .type _Z2f3IlTpTnT_JLl1EEEvv,@function +_Z2f3IlTpTnT_JLl1EEEvv: # @_Z2f3IlTpTnT_JLl1EEEvv .Lfunc_begin35: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp70: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp71: .Lfunc_end35: - .size _Z2f3IlJLl1EEEvv, .Lfunc_end35-_Z2f3IlJLl1EEEvv + .size _Z2f3IlTpTnT_JLl1EEEvv, .Lfunc_end35-_Z2f3IlTpTnT_JLl1EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IjJLj1EEEvv,"axG",@progbits,_Z2f3IjJLj1EEEvv,comdat - .weak _Z2f3IjJLj1EEEvv # -- Begin function _Z2f3IjJLj1EEEvv - .p2align 4, 0x90 - .type _Z2f3IjJLj1EEEvv,@function -_Z2f3IjJLj1EEEvv: # @_Z2f3IjJLj1EEEvv + .section .text._Z2f3IjTpTnT_JLj1EEEvv,"axG",@progbits,_Z2f3IjTpTnT_JLj1EEEvv,comdat + .weak _Z2f3IjTpTnT_JLj1EEEvv # -- Begin function _Z2f3IjTpTnT_JLj1EEEvv + .p2align 4 + .type _Z2f3IjTpTnT_JLj1EEEvv,@function +_Z2f3IjTpTnT_JLj1EEEvv: # @_Z2f3IjTpTnT_JLj1EEEvv .Lfunc_begin36: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp72: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp73: .Lfunc_end36: - .size _Z2f3IjJLj1EEEvv, .Lfunc_end36-_Z2f3IjJLj1EEEvv + .size _Z2f3IjTpTnT_JLj1EEEvv, .Lfunc_end36-_Z2f3IjTpTnT_JLj1EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IsJLs1EEEvv,"axG",@progbits,_Z2f3IsJLs1EEEvv,comdat - .weak _Z2f3IsJLs1EEEvv # -- Begin function _Z2f3IsJLs1EEEvv - .p2align 4, 0x90 - .type _Z2f3IsJLs1EEEvv,@function -_Z2f3IsJLs1EEEvv: # @_Z2f3IsJLs1EEEvv + .section .text._Z2f3IsTpTnT_JLs1EEEvv,"axG",@progbits,_Z2f3IsTpTnT_JLs1EEEvv,comdat + .weak _Z2f3IsTpTnT_JLs1EEEvv # -- Begin function _Z2f3IsTpTnT_JLs1EEEvv + .p2align 4 + .type _Z2f3IsTpTnT_JLs1EEEvv,@function +_Z2f3IsTpTnT_JLs1EEEvv: # @_Z2f3IsTpTnT_JLs1EEEvv .Lfunc_begin37: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp74: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp75: .Lfunc_end37: - .size _Z2f3IsJLs1EEEvv, .Lfunc_end37-_Z2f3IsJLs1EEEvv + .size _Z2f3IsTpTnT_JLs1EEEvv, .Lfunc_end37-_Z2f3IsTpTnT_JLs1EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IhJLh0EEEvv,"axG",@progbits,_Z2f3IhJLh0EEEvv,comdat - .weak _Z2f3IhJLh0EEEvv # -- Begin function _Z2f3IhJLh0EEEvv - .p2align 4, 0x90 - .type _Z2f3IhJLh0EEEvv,@function -_Z2f3IhJLh0EEEvv: # @_Z2f3IhJLh0EEEvv + .section .text._Z2f3IhTpTnT_JLh0EEEvv,"axG",@progbits,_Z2f3IhTpTnT_JLh0EEEvv,comdat + .weak _Z2f3IhTpTnT_JLh0EEEvv # -- Begin function _Z2f3IhTpTnT_JLh0EEEvv + .p2align 4 + .type _Z2f3IhTpTnT_JLh0EEEvv,@function +_Z2f3IhTpTnT_JLh0EEEvv: # @_Z2f3IhTpTnT_JLh0EEEvv .Lfunc_begin38: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp76: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp77: .Lfunc_end38: - .size _Z2f3IhJLh0EEEvv, .Lfunc_end38-_Z2f3IhJLh0EEEvv + .size _Z2f3IhTpTnT_JLh0EEEvv, .Lfunc_end38-_Z2f3IhTpTnT_JLh0EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IaJLa0EEEvv,"axG",@progbits,_Z2f3IaJLa0EEEvv,comdat - .weak _Z2f3IaJLa0EEEvv # -- Begin function _Z2f3IaJLa0EEEvv - .p2align 4, 0x90 - .type _Z2f3IaJLa0EEEvv,@function -_Z2f3IaJLa0EEEvv: # @_Z2f3IaJLa0EEEvv + .section .text._Z2f3IaTpTnT_JLa0EEEvv,"axG",@progbits,_Z2f3IaTpTnT_JLa0EEEvv,comdat + .weak _Z2f3IaTpTnT_JLa0EEEvv # -- Begin function _Z2f3IaTpTnT_JLa0EEEvv + .p2align 4 + .type _Z2f3IaTpTnT_JLa0EEEvv,@function +_Z2f3IaTpTnT_JLa0EEEvv: # @_Z2f3IaTpTnT_JLa0EEEvv .Lfunc_begin39: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp78: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp79: .Lfunc_end39: - .size _Z2f3IaJLa0EEEvv, .Lfunc_end39-_Z2f3IaJLa0EEEvv + .size _Z2f3IaTpTnT_JLa0EEEvv, .Lfunc_end39-_Z2f3IaTpTnT_JLa0EEEvv .cfi_endproc # -- End function - .section .text._Z2f3ItJLt1ELt2EEEvv,"axG",@progbits,_Z2f3ItJLt1ELt2EEEvv,comdat - .weak _Z2f3ItJLt1ELt2EEEvv # -- Begin function _Z2f3ItJLt1ELt2EEEvv - .p2align 4, 0x90 - .type _Z2f3ItJLt1ELt2EEEvv,@function -_Z2f3ItJLt1ELt2EEEvv: # @_Z2f3ItJLt1ELt2EEEvv + .section .text._Z2f3ItTpTnT_JLt1ELt2EEEvv,"axG",@progbits,_Z2f3ItTpTnT_JLt1ELt2EEEvv,comdat + .weak _Z2f3ItTpTnT_JLt1ELt2EEEvv # -- Begin function _Z2f3ItTpTnT_JLt1ELt2EEEvv + .p2align 4 + .type _Z2f3ItTpTnT_JLt1ELt2EEEvv,@function +_Z2f3ItTpTnT_JLt1ELt2EEEvv: # @_Z2f3ItTpTnT_JLt1ELt2EEEvv .Lfunc_begin40: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp80: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp81: .Lfunc_end40: - .size _Z2f3ItJLt1ELt2EEEvv, .Lfunc_end40-_Z2f3ItJLt1ELt2EEEvv + .size _Z2f3ItTpTnT_JLt1ELt2EEEvv, .Lfunc_end40-_Z2f3ItTpTnT_JLt1ELt2EEEvv .cfi_endproc # -- End function - .section .text._Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,"axG",@progbits,_Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,comdat - .weak _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv # -- Begin function _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv - .p2align 4, 0x90 - .type _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,@function -_Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv: # @_Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv + .section .text._Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,"axG",@progbits,_Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,comdat + .weak _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv # -- Begin function _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv + .p2align 4 + .type _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv,@function +_Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv: # @_Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv .Lfunc_begin41: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp82: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp83: .Lfunc_end41: - .size _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv, .Lfunc_end41-_Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv + .size _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv, .Lfunc_end41-_Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv .cfi_endproc # -- End function - .section .text._Z2f3InJLn18446744073709551614EEEvv,"axG",@progbits,_Z2f3InJLn18446744073709551614EEEvv,comdat - .weak _Z2f3InJLn18446744073709551614EEEvv # -- Begin function _Z2f3InJLn18446744073709551614EEEvv - .p2align 4, 0x90 - .type _Z2f3InJLn18446744073709551614EEEvv,@function -_Z2f3InJLn18446744073709551614EEEvv: # @_Z2f3InJLn18446744073709551614EEEvv + .section .text._Z2f3InTpTnT_JLn18446744073709551614EEEvv,"axG",@progbits,_Z2f3InTpTnT_JLn18446744073709551614EEEvv,comdat + .weak _Z2f3InTpTnT_JLn18446744073709551614EEEvv # -- Begin function _Z2f3InTpTnT_JLn18446744073709551614EEEvv + .p2align 4 + .type _Z2f3InTpTnT_JLn18446744073709551614EEEvv,@function +_Z2f3InTpTnT_JLn18446744073709551614EEEvv: # @_Z2f3InTpTnT_JLn18446744073709551614EEEvv .Lfunc_begin42: - .loc 0 41 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:41:0 + .loc 0 43 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:43:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp84: - .loc 0 42 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:42:1 + .loc 0 44 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp85: .Lfunc_end42: - .size _Z2f3InJLn18446744073709551614EEEvv, .Lfunc_end42-_Z2f3InJLn18446744073709551614EEEvv + .size _Z2f3InTpTnT_JLn18446744073709551614EEEvv, .Lfunc_end42-_Z2f3InTpTnT_JLn18446744073709551614EEEvv .cfi_endproc # -- End function .section .text._Z2f4IjLj3EEvv,"axG",@progbits,_Z2f4IjLj3EEvv,comdat .weak _Z2f4IjLj3EEvv # -- Begin function _Z2f4IjLj3EEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f4IjLj3EEvv,@function _Z2f4IjLj3EEvv: # @_Z2f4IjLj3EEvv .Lfunc_begin43: - .loc 0 44 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:44:0 + .loc 0 46 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:46:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp86: - .loc 0 45 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:45:1 + .loc 0 47 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:47:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1393,20 +1397,20 @@ _Z2f4IjLj3EEvv: # @_Z2f4IjLj3EEvv # -- End function .section .text._Z2f1IJ2t3IiLb0EEEEvv,"axG",@progbits,_Z2f1IJ2t3IiLb0EEEEvv,comdat .weak _Z2f1IJ2t3IiLb0EEEEvv # -- Begin function _Z2f1IJ2t3IiLb0EEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJ2t3IiLb0EEEEvv,@function _Z2f1IJ2t3IiLb0EEEEvv: # @_Z2f1IJ2t3IiLb0EEEEvv .Lfunc_begin44: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp88: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1417,20 +1421,20 @@ _Z2f1IJ2t3IiLb0EEEEvv: # @_Z2f1IJ2t3IiLb0EEEEvv # -- End function .section .text._Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv,"axG",@progbits,_Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv,comdat .weak _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv # -- Begin function _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv,@function _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv: # @_Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv .Lfunc_begin45: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp90: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1440,66 +1444,66 @@ _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv: # @_Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJZ4mainE3$_1EEvv - .type _Z2f1IJZ4mainE3$_1EEvv,@function -_Z2f1IJZ4mainE3$_1EEvv: # @"_Z2f1IJZ4mainE3$_1EEvv" + .p2align 4 # -- Begin function _Z2f1IJZ4mainE3$_0EEvv + .type _Z2f1IJZ4mainE3$_0EEvv,@function +_Z2f1IJZ4mainE3$_0EEvv: # @"_Z2f1IJZ4mainE3$_0EEvv" .Lfunc_begin46: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp92: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp93: .Lfunc_end46: - .size _Z2f1IJZ4mainE3$_1EEvv, .Lfunc_end46-_Z2f1IJZ4mainE3$_1EEvv + .size _Z2f1IJZ4mainE3$_0EEvv, .Lfunc_end46-_Z2f1IJZ4mainE3$_0EEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv - .type _Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv,@function -_Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv: # @"_Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv" + .p2align 4 # -- Begin function _Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv + .type _Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv,@function +_Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv: # @"_Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv" .Lfunc_begin47: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp94: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp95: .Lfunc_end47: - .size _Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv, .Lfunc_end47-_Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv + .size _Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv, .Lfunc_end47-_Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv .cfi_endproc # -- End function .section .text._Z2f1IJFifEEEvv,"axG",@progbits,_Z2f1IJFifEEEvv,comdat .weak _Z2f1IJFifEEEvv # -- Begin function _Z2f1IJFifEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJFifEEEvv,@function _Z2f1IJFifEEEvv: # @_Z2f1IJFifEEEvv .Lfunc_begin48: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp96: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1510,20 +1514,20 @@ _Z2f1IJFifEEEvv: # @_Z2f1IJFifEEEvv # -- End function .section .text._Z2f1IJFvzEEEvv,"axG",@progbits,_Z2f1IJFvzEEEvv,comdat .weak _Z2f1IJFvzEEEvv # -- Begin function _Z2f1IJFvzEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJFvzEEEvv,@function _Z2f1IJFvzEEEvv: # @_Z2f1IJFvzEEEvv .Lfunc_begin49: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp98: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1534,20 +1538,20 @@ _Z2f1IJFvzEEEvv: # @_Z2f1IJFvzEEEvv # -- End function .section .text._Z2f1IJFvizEEEvv,"axG",@progbits,_Z2f1IJFvizEEEvv,comdat .weak _Z2f1IJFvizEEEvv # -- Begin function _Z2f1IJFvizEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJFvizEEEvv,@function _Z2f1IJFvizEEEvv: # @_Z2f1IJFvizEEEvv .Lfunc_begin50: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp100: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1558,20 +1562,20 @@ _Z2f1IJFvizEEEvv: # @_Z2f1IJFvizEEEvv # -- End function .section .text._Z2f1IJRKiEEvv,"axG",@progbits,_Z2f1IJRKiEEvv,comdat .weak _Z2f1IJRKiEEvv # -- Begin function _Z2f1IJRKiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRKiEEvv,@function _Z2f1IJRKiEEvv: # @_Z2f1IJRKiEEvv .Lfunc_begin51: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp102: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1582,20 +1586,20 @@ _Z2f1IJRKiEEvv: # @_Z2f1IJRKiEEvv # -- End function .section .text._Z2f1IJRPKiEEvv,"axG",@progbits,_Z2f1IJRPKiEEvv,comdat .weak _Z2f1IJRPKiEEvv # -- Begin function _Z2f1IJRPKiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRPKiEEvv,@function _Z2f1IJRPKiEEvv: # @_Z2f1IJRPKiEEvv .Lfunc_begin52: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp104: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1605,20 +1609,20 @@ _Z2f1IJRPKiEEvv: # @_Z2f1IJRPKiEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJN12_GLOBAL__N_12t5EEEvv + .p2align 4 # -- Begin function _Z2f1IJN12_GLOBAL__N_12t5EEEvv .type _Z2f1IJN12_GLOBAL__N_12t5EEEvv,@function _Z2f1IJN12_GLOBAL__N_12t5EEEvv: # @_Z2f1IJN12_GLOBAL__N_12t5EEEvv .Lfunc_begin53: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp106: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1629,20 +1633,20 @@ _Z2f1IJN12_GLOBAL__N_12t5EEEvv: # @_Z2f1IJN12_GLOBAL__N_12t5EEEvv # -- End function .section .text._Z2f1IJDnEEvv,"axG",@progbits,_Z2f1IJDnEEvv,comdat .weak _Z2f1IJDnEEvv # -- Begin function _Z2f1IJDnEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJDnEEvv,@function _Z2f1IJDnEEvv: # @_Z2f1IJDnEEvv .Lfunc_begin54: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp108: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1653,20 +1657,20 @@ _Z2f1IJDnEEvv: # @_Z2f1IJDnEEvv # -- End function .section .text._Z2f1IJPlS0_EEvv,"axG",@progbits,_Z2f1IJPlS0_EEvv,comdat .weak _Z2f1IJPlS0_EEvv # -- Begin function _Z2f1IJPlS0_EEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPlS0_EEvv,@function _Z2f1IJPlS0_EEvv: # @_Z2f1IJPlS0_EEvv .Lfunc_begin55: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp110: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1677,20 +1681,20 @@ _Z2f1IJPlS0_EEvv: # @_Z2f1IJPlS0_EEvv # -- End function .section .text._Z2f1IJPlP3udtEEvv,"axG",@progbits,_Z2f1IJPlP3udtEEvv,comdat .weak _Z2f1IJPlP3udtEEvv # -- Begin function _Z2f1IJPlP3udtEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPlP3udtEEvv,@function _Z2f1IJPlP3udtEEvv: # @_Z2f1IJPlP3udtEEvv .Lfunc_begin56: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp112: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1701,20 +1705,20 @@ _Z2f1IJPlP3udtEEvv: # @_Z2f1IJPlP3udtEEvv # -- End function .section .text._Z2f1IJKPvEEvv,"axG",@progbits,_Z2f1IJKPvEEvv,comdat .weak _Z2f1IJKPvEEvv # -- Begin function _Z2f1IJKPvEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJKPvEEvv,@function _Z2f1IJKPvEEvv: # @_Z2f1IJKPvEEvv .Lfunc_begin57: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp114: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1725,20 +1729,20 @@ _Z2f1IJKPvEEvv: # @_Z2f1IJKPvEEvv # -- End function .section .text._Z2f1IJPKPKvEEvv,"axG",@progbits,_Z2f1IJPKPKvEEvv,comdat .weak _Z2f1IJPKPKvEEvv # -- Begin function _Z2f1IJPKPKvEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPKPKvEEvv,@function _Z2f1IJPKPKvEEvv: # @_Z2f1IJPKPKvEEvv .Lfunc_begin58: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp116: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1749,20 +1753,20 @@ _Z2f1IJPKPKvEEvv: # @_Z2f1IJPKPKvEEvv # -- End function .section .text._Z2f1IJFvvEEEvv,"axG",@progbits,_Z2f1IJFvvEEEvv,comdat .weak _Z2f1IJFvvEEEvv # -- Begin function _Z2f1IJFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJFvvEEEvv,@function _Z2f1IJFvvEEEvv: # @_Z2f1IJFvvEEEvv .Lfunc_begin59: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp118: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1773,20 +1777,20 @@ _Z2f1IJFvvEEEvv: # @_Z2f1IJFvvEEEvv # -- End function .section .text._Z2f1IJPFvvEEEvv,"axG",@progbits,_Z2f1IJPFvvEEEvv,comdat .weak _Z2f1IJPFvvEEEvv # -- Begin function _Z2f1IJPFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPFvvEEEvv,@function _Z2f1IJPFvvEEEvv: # @_Z2f1IJPFvvEEEvv .Lfunc_begin60: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp120: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1796,88 +1800,88 @@ _Z2f1IJPFvvEEEvv: # @_Z2f1IJPFvvEEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJPZ4mainE3$_1EEvv - .type _Z2f1IJPZ4mainE3$_1EEvv,@function -_Z2f1IJPZ4mainE3$_1EEvv: # @"_Z2f1IJPZ4mainE3$_1EEvv" + .p2align 4 # -- Begin function _Z2f1IJPZ4mainE3$_0EEvv + .type _Z2f1IJPZ4mainE3$_0EEvv,@function +_Z2f1IJPZ4mainE3$_0EEvv: # @"_Z2f1IJPZ4mainE3$_0EEvv" .Lfunc_begin61: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp122: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp123: .Lfunc_end61: - .size _Z2f1IJPZ4mainE3$_1EEvv, .Lfunc_end61-_Z2f1IJPZ4mainE3$_1EEvv + .size _Z2f1IJPZ4mainE3$_0EEvv, .Lfunc_end61-_Z2f1IJPZ4mainE3$_0EEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJZ4mainE3$_2EEvv - .type _Z2f1IJZ4mainE3$_2EEvv,@function -_Z2f1IJZ4mainE3$_2EEvv: # @"_Z2f1IJZ4mainE3$_2EEvv" + .p2align 4 # -- Begin function _Z2f1IJZ4mainE3$_1EEvv + .type _Z2f1IJZ4mainE3$_1EEvv,@function +_Z2f1IJZ4mainE3$_1EEvv: # @"_Z2f1IJZ4mainE3$_1EEvv" .Lfunc_begin62: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp124: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp125: .Lfunc_end62: - .size _Z2f1IJZ4mainE3$_2EEvv, .Lfunc_end62-_Z2f1IJZ4mainE3$_2EEvv + .size _Z2f1IJZ4mainE3$_1EEvv, .Lfunc_end62-_Z2f1IJZ4mainE3$_1EEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJPZ4mainE3$_2EEvv - .type _Z2f1IJPZ4mainE3$_2EEvv,@function -_Z2f1IJPZ4mainE3$_2EEvv: # @"_Z2f1IJPZ4mainE3$_2EEvv" + .p2align 4 # -- Begin function _Z2f1IJPZ4mainE3$_1EEvv + .type _Z2f1IJPZ4mainE3$_1EEvv,@function +_Z2f1IJPZ4mainE3$_1EEvv: # @"_Z2f1IJPZ4mainE3$_1EEvv" .Lfunc_begin63: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp126: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp127: .Lfunc_end63: - .size _Z2f1IJPZ4mainE3$_2EEvv, .Lfunc_end63-_Z2f1IJPZ4mainE3$_2EEvv + .size _Z2f1IJPZ4mainE3$_1EEvv, .Lfunc_end63-_Z2f1IJPZ4mainE3$_1EEvv .cfi_endproc # -- End function .section .text._Z2f5IJ2t1IJiEEEiEvv,"axG",@progbits,_Z2f5IJ2t1IJiEEEiEvv,comdat .weak _Z2f5IJ2t1IJiEEEiEvv # -- Begin function _Z2f5IJ2t1IJiEEEiEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f5IJ2t1IJiEEEiEvv,@function _Z2f5IJ2t1IJiEEEiEvv: # @_Z2f5IJ2t1IJiEEEiEvv .Lfunc_begin64: - .loc 0 62 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:62:0 + .loc 0 64 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp128: - .loc 0 62 13 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:62:13 + .loc 0 64 13 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:13 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1888,20 +1892,20 @@ _Z2f5IJ2t1IJiEEEiEvv: # @_Z2f5IJ2t1IJiEEEiEvv # -- End function .section .text._Z2f5IJEiEvv,"axG",@progbits,_Z2f5IJEiEvv,comdat .weak _Z2f5IJEiEvv # -- Begin function _Z2f5IJEiEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f5IJEiEvv,@function _Z2f5IJEiEvv: # @_Z2f5IJEiEvv .Lfunc_begin65: - .loc 0 62 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:62:0 + .loc 0 64 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp130: - .loc 0 62 13 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:62:13 + .loc 0 64 13 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:13 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1912,20 +1916,20 @@ _Z2f5IJEiEvv: # @_Z2f5IJEiEvv # -- End function .section .text._Z2f6I2t1IJiEEJEEvv,"axG",@progbits,_Z2f6I2t1IJiEEJEEvv,comdat .weak _Z2f6I2t1IJiEEJEEvv # -- Begin function _Z2f6I2t1IJiEEJEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f6I2t1IJiEEJEEvv,@function _Z2f6I2t1IJiEEJEEvv: # @_Z2f6I2t1IJiEEJEEvv .Lfunc_begin66: - .loc 0 64 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:0 + .loc 0 66 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:66:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp132: - .loc 0 64 13 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:64:13 + .loc 0 66 13 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:66:13 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1936,20 +1940,20 @@ _Z2f6I2t1IJiEEJEEvv: # @_Z2f6I2t1IJiEEJEEvv # -- End function .section .text._Z2f1IJEEvv,"axG",@progbits,_Z2f1IJEEvv,comdat .weak _Z2f1IJEEvv # -- Begin function _Z2f1IJEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJEEvv,@function _Z2f1IJEEvv: # @_Z2f1IJEEvv .Lfunc_begin67: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp134: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1960,20 +1964,20 @@ _Z2f1IJEEvv: # @_Z2f1IJEEvv # -- End function .section .text._Z2f1IJPKvS1_EEvv,"axG",@progbits,_Z2f1IJPKvS1_EEvv,comdat .weak _Z2f1IJPKvS1_EEvv # -- Begin function _Z2f1IJPKvS1_EEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPKvS1_EEvv,@function _Z2f1IJPKvS1_EEvv: # @_Z2f1IJPKvS1_EEvv .Lfunc_begin68: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp136: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -1984,20 +1988,20 @@ _Z2f1IJPKvS1_EEvv: # @_Z2f1IJPKvS1_EEvv # -- End function .section .text._Z2f1IJP2t1IJPiEEEEvv,"axG",@progbits,_Z2f1IJP2t1IJPiEEEEvv,comdat .weak _Z2f1IJP2t1IJPiEEEEvv # -- Begin function _Z2f1IJP2t1IJPiEEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJP2t1IJPiEEEEvv,@function _Z2f1IJP2t1IJPiEEEEvv: # @_Z2f1IJP2t1IJPiEEEEvv .Lfunc_begin69: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp138: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2008,20 +2012,20 @@ _Z2f1IJP2t1IJPiEEEEvv: # @_Z2f1IJP2t1IJPiEEEEvv # -- End function .section .text._Z2f1IJA_PiEEvv,"axG",@progbits,_Z2f1IJA_PiEEvv,comdat .weak _Z2f1IJA_PiEEvv # -- Begin function _Z2f1IJA_PiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJA_PiEEvv,@function _Z2f1IJA_PiEEvv: # @_Z2f1IJA_PiEEvv .Lfunc_begin70: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp140: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2032,13 +2036,13 @@ _Z2f1IJA_PiEEvv: # @_Z2f1IJA_PiEEvv # -- End function .section .text._ZN2t6lsIiEEvi,"axG",@progbits,_ZN2t6lsIiEEvi,comdat .weak _ZN2t6lsIiEEvi # -- Begin function _ZN2t6lsIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6lsIiEEvi,@function _ZN2t6lsIiEEvi: # @_ZN2t6lsIiEEvi .Lfunc_begin71: - .loc 0 67 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:67:0 + .loc 0 69 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:69:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2047,7 +2051,7 @@ _ZN2t6lsIiEEvi: # @_ZN2t6lsIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp142: - .loc 0 68 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:68:3 + .loc 0 70 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:70:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2058,13 +2062,13 @@ _ZN2t6lsIiEEvi: # @_ZN2t6lsIiEEvi # -- End function .section .text._ZN2t6ltIiEEvi,"axG",@progbits,_ZN2t6ltIiEEvi,comdat .weak _ZN2t6ltIiEEvi # -- Begin function _ZN2t6ltIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6ltIiEEvi,@function _ZN2t6ltIiEEvi: # @_ZN2t6ltIiEEvi .Lfunc_begin72: - .loc 0 70 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:70:0 + .loc 0 72 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:72:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2073,7 +2077,7 @@ _ZN2t6ltIiEEvi: # @_ZN2t6ltIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp144: - .loc 0 71 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:71:3 + .loc 0 73 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:73:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2084,13 +2088,13 @@ _ZN2t6ltIiEEvi: # @_ZN2t6ltIiEEvi # -- End function .section .text._ZN2t6leIiEEvi,"axG",@progbits,_ZN2t6leIiEEvi,comdat .weak _ZN2t6leIiEEvi # -- Begin function _ZN2t6leIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6leIiEEvi,@function _ZN2t6leIiEEvi: # @_ZN2t6leIiEEvi .Lfunc_begin73: - .loc 0 73 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:73:0 + .loc 0 75 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:75:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2099,7 +2103,7 @@ _ZN2t6leIiEEvi: # @_ZN2t6leIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp146: - .loc 0 74 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:74:3 + .loc 0 76 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:76:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2110,13 +2114,13 @@ _ZN2t6leIiEEvi: # @_ZN2t6leIiEEvi # -- End function .section .text._ZN2t6cvP2t1IJfEEIiEEv,"axG",@progbits,_ZN2t6cvP2t1IJfEEIiEEv,comdat .weak _ZN2t6cvP2t1IJfEEIiEEv # -- Begin function _ZN2t6cvP2t1IJfEEIiEEv - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6cvP2t1IJfEEIiEEv,@function _ZN2t6cvP2t1IJfEEIiEEv: # @_ZN2t6cvP2t1IJfEEIiEEv .Lfunc_begin74: - .loc 0 76 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:76:0 + .loc 0 78 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:78:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2124,9 +2128,10 @@ _ZN2t6cvP2t1IJfEEIiEEv: # @_ZN2t6cvP2t1IJfEEIiEEv .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp148: - .loc 0 77 5 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:77:5 + .loc 0 79 5 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:79:5 xorl %eax, %eax # kill: def $rax killed $eax + .loc 0 79 5 epilogue_begin is_stmt 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:79:5 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2137,13 +2142,13 @@ _ZN2t6cvP2t1IJfEEIiEEv: # @_ZN2t6cvP2t1IJfEEIiEEv # -- End function .section .text._ZN2t6miIiEEvi,"axG",@progbits,_ZN2t6miIiEEvi,comdat .weak _ZN2t6miIiEEvi # -- Begin function _ZN2t6miIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6miIiEEvi,@function _ZN2t6miIiEEvi: # @_ZN2t6miIiEEvi .Lfunc_begin75: - .loc 0 80 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:80:0 + .loc 0 82 0 is_stmt 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:82:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2152,7 +2157,7 @@ _ZN2t6miIiEEvi: # @_ZN2t6miIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp150: - .loc 0 81 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:81:3 + .loc 0 83 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:83:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2163,13 +2168,13 @@ _ZN2t6miIiEEvi: # @_ZN2t6miIiEEvi # -- End function .section .text._ZN2t6mlIiEEvi,"axG",@progbits,_ZN2t6mlIiEEvi,comdat .weak _ZN2t6mlIiEEvi # -- Begin function _ZN2t6mlIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6mlIiEEvi,@function _ZN2t6mlIiEEvi: # @_ZN2t6mlIiEEvi .Lfunc_begin76: - .loc 0 83 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:83:0 + .loc 0 85 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:85:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2178,7 +2183,7 @@ _ZN2t6mlIiEEvi: # @_ZN2t6mlIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp152: - .loc 0 84 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:84:3 + .loc 0 86 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:86:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2189,13 +2194,13 @@ _ZN2t6mlIiEEvi: # @_ZN2t6mlIiEEvi # -- End function .section .text._ZN2t6dvIiEEvi,"axG",@progbits,_ZN2t6dvIiEEvi,comdat .weak _ZN2t6dvIiEEvi # -- Begin function _ZN2t6dvIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6dvIiEEvi,@function _ZN2t6dvIiEEvi: # @_ZN2t6dvIiEEvi .Lfunc_begin77: - .loc 0 86 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:86:0 + .loc 0 88 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:88:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2204,7 +2209,7 @@ _ZN2t6dvIiEEvi: # @_ZN2t6dvIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp154: - .loc 0 87 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:87:3 + .loc 0 89 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:89:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2215,13 +2220,13 @@ _ZN2t6dvIiEEvi: # @_ZN2t6dvIiEEvi # -- End function .section .text._ZN2t6rmIiEEvi,"axG",@progbits,_ZN2t6rmIiEEvi,comdat .weak _ZN2t6rmIiEEvi # -- Begin function _ZN2t6rmIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6rmIiEEvi,@function _ZN2t6rmIiEEvi: # @_ZN2t6rmIiEEvi .Lfunc_begin78: - .loc 0 89 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:89:0 + .loc 0 91 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:91:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2230,7 +2235,7 @@ _ZN2t6rmIiEEvi: # @_ZN2t6rmIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp156: - .loc 0 90 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:90:3 + .loc 0 92 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:92:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2241,13 +2246,13 @@ _ZN2t6rmIiEEvi: # @_ZN2t6rmIiEEvi # -- End function .section .text._ZN2t6eoIiEEvi,"axG",@progbits,_ZN2t6eoIiEEvi,comdat .weak _ZN2t6eoIiEEvi # -- Begin function _ZN2t6eoIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6eoIiEEvi,@function _ZN2t6eoIiEEvi: # @_ZN2t6eoIiEEvi .Lfunc_begin79: - .loc 0 92 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:92:0 + .loc 0 94 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:94:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2256,7 +2261,7 @@ _ZN2t6eoIiEEvi: # @_ZN2t6eoIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp158: - .loc 0 93 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:93:3 + .loc 0 95 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:95:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2267,13 +2272,13 @@ _ZN2t6eoIiEEvi: # @_ZN2t6eoIiEEvi # -- End function .section .text._ZN2t6anIiEEvi,"axG",@progbits,_ZN2t6anIiEEvi,comdat .weak _ZN2t6anIiEEvi # -- Begin function _ZN2t6anIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6anIiEEvi,@function _ZN2t6anIiEEvi: # @_ZN2t6anIiEEvi .Lfunc_begin80: - .loc 0 95 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:95:0 + .loc 0 97 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:97:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2282,7 +2287,7 @@ _ZN2t6anIiEEvi: # @_ZN2t6anIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp160: - .loc 0 96 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:96:3 + .loc 0 98 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:98:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2293,13 +2298,13 @@ _ZN2t6anIiEEvi: # @_ZN2t6anIiEEvi # -- End function .section .text._ZN2t6orIiEEvi,"axG",@progbits,_ZN2t6orIiEEvi,comdat .weak _ZN2t6orIiEEvi # -- Begin function _ZN2t6orIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6orIiEEvi,@function _ZN2t6orIiEEvi: # @_ZN2t6orIiEEvi .Lfunc_begin81: - .loc 0 98 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:98:0 + .loc 0 100 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:100:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2308,7 +2313,7 @@ _ZN2t6orIiEEvi: # @_ZN2t6orIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp162: - .loc 0 99 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:99:3 + .loc 0 101 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:101:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2319,13 +2324,13 @@ _ZN2t6orIiEEvi: # @_ZN2t6orIiEEvi # -- End function .section .text._ZN2t6coIiEEvv,"axG",@progbits,_ZN2t6coIiEEvv,comdat .weak _ZN2t6coIiEEvv # -- Begin function _ZN2t6coIiEEvv - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6coIiEEvv,@function _ZN2t6coIiEEvv: # @_ZN2t6coIiEEvv .Lfunc_begin82: - .loc 0 101 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:101:0 + .loc 0 103 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:103:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2333,7 +2338,7 @@ _ZN2t6coIiEEvv: # @_ZN2t6coIiEEvv .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp164: - .loc 0 102 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:102:3 + .loc 0 104 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:104:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2344,13 +2349,13 @@ _ZN2t6coIiEEvv: # @_ZN2t6coIiEEvv # -- End function .section .text._ZN2t6ntIiEEvv,"axG",@progbits,_ZN2t6ntIiEEvv,comdat .weak _ZN2t6ntIiEEvv # -- Begin function _ZN2t6ntIiEEvv - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6ntIiEEvv,@function _ZN2t6ntIiEEvv: # @_ZN2t6ntIiEEvv .Lfunc_begin83: - .loc 0 104 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:104:0 + .loc 0 106 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:106:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2358,7 +2363,7 @@ _ZN2t6ntIiEEvv: # @_ZN2t6ntIiEEvv .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp166: - .loc 0 105 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:105:3 + .loc 0 107 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:107:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2369,13 +2374,13 @@ _ZN2t6ntIiEEvv: # @_ZN2t6ntIiEEvv # -- End function .section .text._ZN2t6aSIiEEvi,"axG",@progbits,_ZN2t6aSIiEEvi,comdat .weak _ZN2t6aSIiEEvi # -- Begin function _ZN2t6aSIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6aSIiEEvi,@function _ZN2t6aSIiEEvi: # @_ZN2t6aSIiEEvi .Lfunc_begin84: - .loc 0 107 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:107:0 + .loc 0 109 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:109:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2384,7 +2389,7 @@ _ZN2t6aSIiEEvi: # @_ZN2t6aSIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp168: - .loc 0 108 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:108:3 + .loc 0 110 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:110:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2395,13 +2400,13 @@ _ZN2t6aSIiEEvi: # @_ZN2t6aSIiEEvi # -- End function .section .text._ZN2t6gtIiEEvi,"axG",@progbits,_ZN2t6gtIiEEvi,comdat .weak _ZN2t6gtIiEEvi # -- Begin function _ZN2t6gtIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6gtIiEEvi,@function _ZN2t6gtIiEEvi: # @_ZN2t6gtIiEEvi .Lfunc_begin85: - .loc 0 110 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:110:0 + .loc 0 112 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:112:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2410,7 +2415,7 @@ _ZN2t6gtIiEEvi: # @_ZN2t6gtIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp170: - .loc 0 111 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:111:3 + .loc 0 113 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:113:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2421,13 +2426,13 @@ _ZN2t6gtIiEEvi: # @_ZN2t6gtIiEEvi # -- End function .section .text._ZN2t6cmIiEEvi,"axG",@progbits,_ZN2t6cmIiEEvi,comdat .weak _ZN2t6cmIiEEvi # -- Begin function _ZN2t6cmIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6cmIiEEvi,@function _ZN2t6cmIiEEvi: # @_ZN2t6cmIiEEvi .Lfunc_begin86: - .loc 0 113 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:113:0 + .loc 0 115 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:115:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2436,7 +2441,7 @@ _ZN2t6cmIiEEvi: # @_ZN2t6cmIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp172: - .loc 0 114 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:114:3 + .loc 0 116 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:116:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2447,13 +2452,13 @@ _ZN2t6cmIiEEvi: # @_ZN2t6cmIiEEvi # -- End function .section .text._ZN2t6clIiEEvv,"axG",@progbits,_ZN2t6clIiEEvv,comdat .weak _ZN2t6clIiEEvv # -- Begin function _ZN2t6clIiEEvv - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6clIiEEvv,@function _ZN2t6clIiEEvv: # @_ZN2t6clIiEEvv .Lfunc_begin87: - .loc 0 116 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:116:0 + .loc 0 118 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:118:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2461,7 +2466,7 @@ _ZN2t6clIiEEvv: # @_ZN2t6clIiEEvv .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp174: - .loc 0 117 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:117:3 + .loc 0 119 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:119:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2472,13 +2477,13 @@ _ZN2t6clIiEEvv: # @_ZN2t6clIiEEvv # -- End function .section .text._ZN2t6ixIiEEvi,"axG",@progbits,_ZN2t6ixIiEEvi,comdat .weak _ZN2t6ixIiEEvi # -- Begin function _ZN2t6ixIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6ixIiEEvi,@function _ZN2t6ixIiEEvi: # @_ZN2t6ixIiEEvi .Lfunc_begin88: - .loc 0 119 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:119:0 + .loc 0 121 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:121:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2487,7 +2492,7 @@ _ZN2t6ixIiEEvi: # @_ZN2t6ixIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp176: - .loc 0 120 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:120:3 + .loc 0 122 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:122:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2498,13 +2503,13 @@ _ZN2t6ixIiEEvi: # @_ZN2t6ixIiEEvi # -- End function .section .text._ZN2t6ssIiEEvi,"axG",@progbits,_ZN2t6ssIiEEvi,comdat .weak _ZN2t6ssIiEEvi # -- Begin function _ZN2t6ssIiEEvi - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6ssIiEEvi,@function _ZN2t6ssIiEEvi: # @_ZN2t6ssIiEEvi .Lfunc_begin89: - .loc 0 122 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:122:0 + .loc 0 124 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:124:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2513,7 +2518,7 @@ _ZN2t6ssIiEEvi: # @_ZN2t6ssIiEEvi movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp178: - .loc 0 123 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:123:3 + .loc 0 125 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:125:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2524,37 +2529,41 @@ _ZN2t6ssIiEEvi: # @_ZN2t6ssIiEEvi # -- End function .section .text._ZN2t6nwIiEEPvmT_,"axG",@progbits,_ZN2t6nwIiEEPvmT_,comdat .weak _ZN2t6nwIiEEPvmT_ # -- Begin function _ZN2t6nwIiEEPvmT_ - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6nwIiEEPvmT_,@function _ZN2t6nwIiEEPvmT_: # @_ZN2t6nwIiEEPvmT_ .Lfunc_begin90: + .loc 0 127 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:127:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp + .loc 0 127 0 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:127:0 movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Lfunc_end90: .size _ZN2t6nwIiEEPvmT_, .Lfunc_end90-_ZN2t6nwIiEEPvmT_ .cfi_endproc - .file 6 "/usr" "lib/gcc/x86_64-linux-gnu/11/../../../../include/x86_64-linux-gnu/c++/11/bits/c++config.h" md5 0x6ae0e1f800c3d941fd89365f1601d843 + .file 1 "builds/release/bin/../include/c++/v1/__cstddef" "size_t.h" # -- End function .section .text._ZN2t6naIiEEPvmT_,"axG",@progbits,_ZN2t6naIiEEPvmT_,comdat .weak _ZN2t6naIiEEPvmT_ # -- Begin function _ZN2t6naIiEEPvmT_ - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6naIiEEPvmT_,@function _ZN2t6naIiEEPvmT_: # @_ZN2t6naIiEEPvmT_ .Lfunc_begin91: + .loc 0 134 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:134:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp + .loc 0 134 0 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:134:0 movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Lfunc_end91: @@ -2563,13 +2572,13 @@ _ZN2t6naIiEEPvmT_: # @_ZN2t6naIiEEPvmT_ # -- End function .section .text._ZN2t6dlIiEEvPvT_,"axG",@progbits,_ZN2t6dlIiEEvPvT_,comdat .weak _ZN2t6dlIiEEvPvT_ # -- Begin function _ZN2t6dlIiEEvPvT_ - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6dlIiEEvPvT_,@function _ZN2t6dlIiEEvPvT_: # @_ZN2t6dlIiEEvPvT_ .Lfunc_begin92: - .loc 0 129 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:129:0 + .loc 0 131 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:131:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2578,7 +2587,7 @@ _ZN2t6dlIiEEvPvT_: # @_ZN2t6dlIiEEvPvT_ movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp180: - .loc 0 130 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:130:3 + .loc 0 132 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:132:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2589,13 +2598,13 @@ _ZN2t6dlIiEEvPvT_: # @_ZN2t6dlIiEEvPvT_ # -- End function .section .text._ZN2t6daIiEEvPvT_,"axG",@progbits,_ZN2t6daIiEEvPvT_,comdat .weak _ZN2t6daIiEEvPvT_ # -- Begin function _ZN2t6daIiEEvPvT_ - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6daIiEEvPvT_,@function _ZN2t6daIiEEvPvT_: # @_ZN2t6daIiEEvPvT_ .Lfunc_begin93: - .loc 0 136 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:136:0 + .loc 0 138 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:138:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -2604,7 +2613,7 @@ _ZN2t6daIiEEvPvT_: # @_ZN2t6daIiEEvPvT_ movq %rdi, -8(%rbp) movl %esi, -12(%rbp) .Ltmp182: - .loc 0 137 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:137:3 + .loc 0 139 3 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:139:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2615,37 +2624,39 @@ _ZN2t6daIiEEvPvT_: # @_ZN2t6daIiEEvPvT_ # -- End function .section .text._ZN2t6awIiEEiv,"axG",@progbits,_ZN2t6awIiEEiv,comdat .weak _ZN2t6awIiEEiv # -- Begin function _ZN2t6awIiEEiv - .p2align 4, 0x90 + .p2align 4 .type _ZN2t6awIiEEiv,@function _ZN2t6awIiEEiv: # @_ZN2t6awIiEEiv .Lfunc_begin94: + .loc 0 141 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:141:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp + .loc 0 141 0 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:141:0 movq %rdi, -8(%rbp) .Lfunc_end94: .size _ZN2t6awIiEEiv, .Lfunc_end94-_ZN2t6awIiEEiv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJZ4mainE2t7EEvv + .p2align 4 # -- Begin function _Z2f1IJZ4mainE2t7EEvv .type _Z2f1IJZ4mainE2t7EEvv,@function _Z2f1IJZ4mainE2t7EEvv: # @_Z2f1IJZ4mainE2t7EEvv .Lfunc_begin95: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp184: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2656,20 +2667,20 @@ _Z2f1IJZ4mainE2t7EEvv: # @_Z2f1IJZ4mainE2t7EEvv # -- End function .section .text._Z2f1IJRA3_iEEvv,"axG",@progbits,_Z2f1IJRA3_iEEvv,comdat .weak _Z2f1IJRA3_iEEvv # -- Begin function _Z2f1IJRA3_iEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRA3_iEEvv,@function _Z2f1IJRA3_iEEvv: # @_Z2f1IJRA3_iEEvv .Lfunc_begin96: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp186: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2680,20 +2691,20 @@ _Z2f1IJRA3_iEEvv: # @_Z2f1IJRA3_iEEvv # -- End function .section .text._Z2f1IJPA3_iEEvv,"axG",@progbits,_Z2f1IJPA3_iEEvv,comdat .weak _Z2f1IJPA3_iEEvv # -- Begin function _Z2f1IJPA3_iEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPA3_iEEvv,@function _Z2f1IJPA3_iEEvv: # @_Z2f1IJPA3_iEEvv .Lfunc_begin97: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp188: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2704,20 +2715,20 @@ _Z2f1IJPA3_iEEvv: # @_Z2f1IJPA3_iEEvv # -- End function .section .text._Z2f7I2t1Evv,"axG",@progbits,_Z2f7I2t1Evv,comdat .weak _Z2f7I2t1Evv # -- Begin function _Z2f7I2t1Evv - .p2align 4, 0x90 + .p2align 4 .type _Z2f7I2t1Evv,@function _Z2f7I2t1Evv: # @_Z2f7I2t1Evv .Lfunc_begin98: - .loc 0 143 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:143:0 + .loc 0 145 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:145:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp190: - .loc 0 143 53 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:143:53 + .loc 0 145 53 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:145:53 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2728,20 +2739,20 @@ _Z2f7I2t1Evv: # @_Z2f7I2t1Evv # -- End function .section .text._Z2f8I2t1iEvv,"axG",@progbits,_Z2f8I2t1iEvv,comdat .weak _Z2f8I2t1iEvv # -- Begin function _Z2f8I2t1iEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f8I2t1iEvv,@function _Z2f8I2t1iEvv: # @_Z2f8I2t1iEvv .Lfunc_begin99: - .loc 0 144 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:144:0 + .loc 0 146 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:146:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp192: - .loc 0 144 66 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:144:66 + .loc 0 146 66 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:146:66 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2752,20 +2763,20 @@ _Z2f8I2t1iEvv: # @_Z2f8I2t1iEvv # -- End function .section .text._ZN2ns8ttp_userINS_5inner3ttpEEEvv,"axG",@progbits,_ZN2ns8ttp_userINS_5inner3ttpEEEvv,comdat .weak _ZN2ns8ttp_userINS_5inner3ttpEEEvv # -- Begin function _ZN2ns8ttp_userINS_5inner3ttpEEEvv - .p2align 4, 0x90 + .p2align 4 .type _ZN2ns8ttp_userINS_5inner3ttpEEEvv,@function _ZN2ns8ttp_userINS_5inner3ttpEEEvv: # @_ZN2ns8ttp_userINS_5inner3ttpEEEvv .Lfunc_begin100: - .loc 0 26 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:26:0 + .loc 0 28 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:28:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp194: - .loc 0 26 19 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:26:19 + .loc 0 28 19 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:28:19 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2776,20 +2787,20 @@ _ZN2ns8ttp_userINS_5inner3ttpEEEvv: # @_ZN2ns8ttp_userINS_5inner3ttpEEEvv # -- End function .section .text._Z2f1IJPiPDnEEvv,"axG",@progbits,_Z2f1IJPiPDnEEvv,comdat .weak _Z2f1IJPiPDnEEvv # -- Begin function _Z2f1IJPiPDnEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPiPDnEEvv,@function _Z2f1IJPiPDnEEvv: # @_Z2f1IJPiPDnEEvv .Lfunc_begin101: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp196: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2800,20 +2811,20 @@ _Z2f1IJPiPDnEEvv: # @_Z2f1IJPiPDnEEvv # -- End function .section .text._Z2f1IJ2t7IiEEEvv,"axG",@progbits,_Z2f1IJ2t7IiEEEvv,comdat .weak _Z2f1IJ2t7IiEEEvv # -- Begin function _Z2f1IJ2t7IiEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJ2t7IiEEEvv,@function _Z2f1IJ2t7IiEEEvv: # @_Z2f1IJ2t7IiEEEvv .Lfunc_begin102: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp198: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2822,46 +2833,46 @@ _Z2f1IJ2t7IiEEEvv: # @_Z2f1IJ2t7IiEEEvv .size _Z2f1IJ2t7IiEEEvv, .Lfunc_end102-_Z2f1IJ2t7IiEEEvv .cfi_endproc # -- End function - .section .text._Z2f7IN2ns3inl2t9EEvv,"axG",@progbits,_Z2f7IN2ns3inl2t9EEvv,comdat - .weak _Z2f7IN2ns3inl2t9EEvv # -- Begin function _Z2f7IN2ns3inl2t9EEvv - .p2align 4, 0x90 - .type _Z2f7IN2ns3inl2t9EEvv,@function -_Z2f7IN2ns3inl2t9EEvv: # @_Z2f7IN2ns3inl2t9EEvv + .section .text._Z2f7ITtTpTyEN2ns3inl2t9EEvv,"axG",@progbits,_Z2f7ITtTpTyEN2ns3inl2t9EEvv,comdat + .weak _Z2f7ITtTpTyEN2ns3inl2t9EEvv # -- Begin function _Z2f7ITtTpTyEN2ns3inl2t9EEvv + .p2align 4 + .type _Z2f7ITtTpTyEN2ns3inl2t9EEvv,@function +_Z2f7ITtTpTyEN2ns3inl2t9EEvv: # @_Z2f7ITtTpTyEN2ns3inl2t9EEvv .Lfunc_begin103: - .loc 0 143 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:143:0 + .loc 0 145 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:145:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp200: - .loc 0 143 53 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:143:53 + .loc 0 145 53 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:145:53 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp201: .Lfunc_end103: - .size _Z2f7IN2ns3inl2t9EEvv, .Lfunc_end103-_Z2f7IN2ns3inl2t9EEvv + .size _Z2f7ITtTpTyEN2ns3inl2t9EEvv, .Lfunc_end103-_Z2f7ITtTpTyEN2ns3inl2t9EEvv .cfi_endproc # -- End function .section .text._Z2f1IJU7_AtomiciEEvv,"axG",@progbits,_Z2f1IJU7_AtomiciEEvv,comdat .weak _Z2f1IJU7_AtomiciEEvv # -- Begin function _Z2f1IJU7_AtomiciEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJU7_AtomiciEEvv,@function _Z2f1IJU7_AtomiciEEvv: # @_Z2f1IJU7_AtomiciEEvv .Lfunc_begin104: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp202: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2872,20 +2883,20 @@ _Z2f1IJU7_AtomiciEEvv: # @_Z2f1IJU7_AtomiciEEvv # -- End function .section .text._Z2f1IJilVcEEvv,"axG",@progbits,_Z2f1IJilVcEEvv,comdat .weak _Z2f1IJilVcEEvv # -- Begin function _Z2f1IJilVcEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJilVcEEvv,@function _Z2f1IJilVcEEvv: # @_Z2f1IJilVcEEvv .Lfunc_begin105: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp204: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2896,20 +2907,20 @@ _Z2f1IJilVcEEvv: # @_Z2f1IJilVcEEvv # -- End function .section .text._Z2f1IJDv2_iEEvv,"axG",@progbits,_Z2f1IJDv2_iEEvv,comdat .weak _Z2f1IJDv2_iEEvv # -- Begin function _Z2f1IJDv2_iEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJDv2_iEEvv,@function _Z2f1IJDv2_iEEvv: # @_Z2f1IJDv2_iEEvv .Lfunc_begin106: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp206: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2920,20 +2931,20 @@ _Z2f1IJDv2_iEEvv: # @_Z2f1IJDv2_iEEvv # -- End function .section .text._Z2f1IJVKPiEEvv,"axG",@progbits,_Z2f1IJVKPiEEvv,comdat .weak _Z2f1IJVKPiEEvv # -- Begin function _Z2f1IJVKPiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJVKPiEEvv,@function _Z2f1IJVKPiEEvv: # @_Z2f1IJVKPiEEvv .Lfunc_begin107: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp208: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2944,20 +2955,20 @@ _Z2f1IJVKPiEEvv: # @_Z2f1IJVKPiEEvv # -- End function .section .text._Z2f1IJVKvEEvv,"axG",@progbits,_Z2f1IJVKvEEvv,comdat .weak _Z2f1IJVKvEEvv # -- Begin function _Z2f1IJVKvEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJVKvEEvv,@function _Z2f1IJVKvEEvv: # @_Z2f1IJVKvEEvv .Lfunc_begin108: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp210: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -2967,37 +2978,37 @@ _Z2f1IJVKvEEvv: # @_Z2f1IJVKvEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJ2t1IJZ4mainE3$_1EEEEvv - .type _Z2f1IJ2t1IJZ4mainE3$_1EEEEvv,@function -_Z2f1IJ2t1IJZ4mainE3$_1EEEEvv: # @"_Z2f1IJ2t1IJZ4mainE3$_1EEEEvv" + .p2align 4 # -- Begin function _Z2f1IJ2t1IJZ4mainE3$_0EEEEvv + .type _Z2f1IJ2t1IJZ4mainE3$_0EEEEvv,@function +_Z2f1IJ2t1IJZ4mainE3$_0EEEEvv: # @"_Z2f1IJ2t1IJZ4mainE3$_0EEEEvv" .Lfunc_begin109: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp212: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp213: .Lfunc_end109: - .size _Z2f1IJ2t1IJZ4mainE3$_1EEEEvv, .Lfunc_end109-_Z2f1IJ2t1IJZ4mainE3$_1EEEEvv + .size _Z2f1IJ2t1IJZ4mainE3$_0EEEEvv, .Lfunc_end109-_Z2f1IJ2t1IJZ4mainE3$_0EEEEvv .cfi_endproc # -- End function .section .text._ZN3t10C2IvEEv,"axG",@progbits,_ZN3t10C2IvEEv,comdat .weak _ZN3t10C2IvEEv # -- Begin function _ZN3t10C2IvEEv - .p2align 4, 0x90 + .p2align 4 .type _ZN3t10C2IvEEv,@function _ZN3t10C2IvEEv: # @_ZN3t10C2IvEEv .Lfunc_begin110: - .loc 0 167 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:167:0 + .loc 0 169 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:169:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 @@ -3005,7 +3016,7 @@ _ZN3t10C2IvEEv: # @_ZN3t10C2IvEEv .cfi_def_cfa_register %rbp movq %rdi, -8(%rbp) .Ltmp214: - .loc 0 167 11 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:167:11 + .loc 0 169 11 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:169:11 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3016,20 +3027,20 @@ _ZN3t10C2IvEEv: # @_ZN3t10C2IvEEv # -- End function .section .text._Z2f1IJM3udtKFvvEEEvv,"axG",@progbits,_Z2f1IJM3udtKFvvEEEvv,comdat .weak _Z2f1IJM3udtKFvvEEEvv # -- Begin function _Z2f1IJM3udtKFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJM3udtKFvvEEEvv,@function _Z2f1IJM3udtKFvvEEEvv: # @_Z2f1IJM3udtKFvvEEEvv .Lfunc_begin111: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp216: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3040,20 +3051,20 @@ _Z2f1IJM3udtKFvvEEEvv: # @_Z2f1IJM3udtKFvvEEEvv # -- End function .section .text._Z2f1IJM3udtVFvvREEEvv,"axG",@progbits,_Z2f1IJM3udtVFvvREEEvv,comdat .weak _Z2f1IJM3udtVFvvREEEvv # -- Begin function _Z2f1IJM3udtVFvvREEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJM3udtVFvvREEEvv,@function _Z2f1IJM3udtVFvvREEEvv: # @_Z2f1IJM3udtVFvvREEEvv .Lfunc_begin112: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp218: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3064,20 +3075,20 @@ _Z2f1IJM3udtVFvvREEEvv: # @_Z2f1IJM3udtVFvvREEEvv # -- End function .section .text._Z2f1IJM3udtVKFvvOEEEvv,"axG",@progbits,_Z2f1IJM3udtVKFvvOEEEvv,comdat .weak _Z2f1IJM3udtVKFvvOEEEvv # -- Begin function _Z2f1IJM3udtVKFvvOEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJM3udtVKFvvOEEEvv,@function _Z2f1IJM3udtVKFvvOEEEvv: # @_Z2f1IJM3udtVKFvvOEEEvv .Lfunc_begin113: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp220: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3088,22 +3099,23 @@ _Z2f1IJM3udtVKFvvOEEEvv: # @_Z2f1IJM3udtVKFvvOEEEvv # -- End function .section .text._Z2f9IiEPFvvEv,"axG",@progbits,_Z2f9IiEPFvvEv,comdat .weak _Z2f9IiEPFvvEv # -- Begin function _Z2f9IiEPFvvEv - .p2align 4, 0x90 + .p2align 4 .type _Z2f9IiEPFvvEv,@function _Z2f9IiEPFvvEv: # @_Z2f9IiEPFvvEv .Lfunc_begin114: - .loc 0 162 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:162:0 + .loc 0 164 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:164:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp222: - .loc 0 163 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:163:3 + .loc 0 165 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:165:3 xorl %eax, %eax # kill: def $rax killed $eax + .loc 0 165 3 epilogue_begin is_stmt 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:165:3 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3114,20 +3126,20 @@ _Z2f9IiEPFvvEv: # @_Z2f9IiEPFvvEv # -- End function .section .text._Z2f1IJKPFvvEEEvv,"axG",@progbits,_Z2f1IJKPFvvEEEvv,comdat .weak _Z2f1IJKPFvvEEEvv # -- Begin function _Z2f1IJKPFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJKPFvvEEEvv,@function _Z2f1IJKPFvvEEEvv: # @_Z2f1IJKPFvvEEEvv .Lfunc_begin115: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 is_stmt 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp224: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3138,20 +3150,20 @@ _Z2f1IJKPFvvEEEvv: # @_Z2f1IJKPFvvEEEvv # -- End function .section .text._Z2f1IJRA1_KcEEvv,"axG",@progbits,_Z2f1IJRA1_KcEEvv,comdat .weak _Z2f1IJRA1_KcEEvv # -- Begin function _Z2f1IJRA1_KcEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRA1_KcEEvv,@function _Z2f1IJRA1_KcEEvv: # @_Z2f1IJRA1_KcEEvv .Lfunc_begin116: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp226: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3162,20 +3174,20 @@ _Z2f1IJRA1_KcEEvv: # @_Z2f1IJRA1_KcEEvv # -- End function .section .text._Z2f1IJKFvvREEEvv,"axG",@progbits,_Z2f1IJKFvvREEEvv,comdat .weak _Z2f1IJKFvvREEEvv # -- Begin function _Z2f1IJKFvvREEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJKFvvREEEvv,@function _Z2f1IJKFvvREEEvv: # @_Z2f1IJKFvvREEEvv .Lfunc_begin117: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp228: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3186,20 +3198,20 @@ _Z2f1IJKFvvREEEvv: # @_Z2f1IJKFvvREEEvv # -- End function .section .text._Z2f1IJVFvvOEEEvv,"axG",@progbits,_Z2f1IJVFvvOEEEvv,comdat .weak _Z2f1IJVFvvOEEEvv # -- Begin function _Z2f1IJVFvvOEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJVFvvOEEEvv,@function _Z2f1IJVFvvOEEEvv: # @_Z2f1IJVFvvOEEEvv .Lfunc_begin118: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp230: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3210,20 +3222,20 @@ _Z2f1IJVFvvOEEEvv: # @_Z2f1IJVFvvOEEEvv # -- End function .section .text._Z2f1IJVKFvvEEEvv,"axG",@progbits,_Z2f1IJVKFvvEEEvv,comdat .weak _Z2f1IJVKFvvEEEvv # -- Begin function _Z2f1IJVKFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJVKFvvEEEvv,@function _Z2f1IJVKFvvEEEvv: # @_Z2f1IJVKFvvEEEvv .Lfunc_begin119: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp232: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3234,20 +3246,20 @@ _Z2f1IJVKFvvEEEvv: # @_Z2f1IJVKFvvEEEvv # -- End function .section .text._Z2f1IJA1_KPiEEvv,"axG",@progbits,_Z2f1IJA1_KPiEEvv,comdat .weak _Z2f1IJA1_KPiEEvv # -- Begin function _Z2f1IJA1_KPiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJA1_KPiEEvv,@function _Z2f1IJA1_KPiEEvv: # @_Z2f1IJA1_KPiEEvv .Lfunc_begin120: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp234: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3258,20 +3270,20 @@ _Z2f1IJA1_KPiEEvv: # @_Z2f1IJA1_KPiEEvv # -- End function .section .text._Z2f1IJRA1_KPiEEvv,"axG",@progbits,_Z2f1IJRA1_KPiEEvv,comdat .weak _Z2f1IJRA1_KPiEEvv # -- Begin function _Z2f1IJRA1_KPiEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRA1_KPiEEvv,@function _Z2f1IJRA1_KPiEEvv: # @_Z2f1IJRA1_KPiEEvv .Lfunc_begin121: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp236: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3282,20 +3294,20 @@ _Z2f1IJRA1_KPiEEvv: # @_Z2f1IJRA1_KPiEEvv # -- End function .section .text._Z2f1IJRKM3udtFvvEEEvv,"axG",@progbits,_Z2f1IJRKM3udtFvvEEEvv,comdat .weak _Z2f1IJRKM3udtFvvEEEvv # -- Begin function _Z2f1IJRKM3udtFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJRKM3udtFvvEEEvv,@function _Z2f1IJRKM3udtFvvEEEvv: # @_Z2f1IJRKM3udtFvvEEEvv .Lfunc_begin122: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp238: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3306,20 +3318,20 @@ _Z2f1IJRKM3udtFvvEEEvv: # @_Z2f1IJRKM3udtFvvEEEvv # -- End function .section .text._Z2f1IJFPFvfEiEEEvv,"axG",@progbits,_Z2f1IJFPFvfEiEEEvv,comdat .weak _Z2f1IJFPFvfEiEEEvv # -- Begin function _Z2f1IJFPFvfEiEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJFPFvfEiEEEvv,@function _Z2f1IJFPFvfEiEEEvv: # @_Z2f1IJFPFvfEiEEEvv .Lfunc_begin123: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp240: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3330,20 +3342,20 @@ _Z2f1IJFPFvfEiEEEvv: # @_Z2f1IJFPFvfEiEEEvv # -- End function .section .text._Z2f1IJA1_2t1IJiEEEEvv,"axG",@progbits,_Z2f1IJA1_2t1IJiEEEEvv,comdat .weak _Z2f1IJA1_2t1IJiEEEEvv # -- Begin function _Z2f1IJA1_2t1IJiEEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJA1_2t1IJiEEEEvv,@function _Z2f1IJA1_2t1IJiEEEEvv: # @_Z2f1IJA1_2t1IJiEEEEvv .Lfunc_begin124: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp242: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3354,20 +3366,20 @@ _Z2f1IJA1_2t1IJiEEEEvv: # @_Z2f1IJA1_2t1IJiEEEEvv # -- End function .section .text._Z2f1IJPDoFvvEEEvv,"axG",@progbits,_Z2f1IJPDoFvvEEEvv,comdat .weak _Z2f1IJPDoFvvEEEvv # -- Begin function _Z2f1IJPDoFvvEEEvv - .p2align 4, 0x90 + .p2align 4 .type _Z2f1IJPDoFvvEEEvv,@function _Z2f1IJPDoFvvEEEvv: # @_Z2f1IJPDoFvvEEEvv .Lfunc_begin125: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp244: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3377,64 +3389,64 @@ _Z2f1IJPDoFvvEEEvv: # @_Z2f1IJPDoFvvEEEvv .cfi_endproc # -- End function .text - .p2align 4, 0x90 # -- Begin function _Z2f1IJFvZ4mainE3$_2EEEvv - .type _Z2f1IJFvZ4mainE3$_2EEEvv,@function -_Z2f1IJFvZ4mainE3$_2EEEvv: # @"_Z2f1IJFvZ4mainE3$_2EEEvv" + .p2align 4 # -- Begin function _Z2f1IJFvZ4mainE3$_1EEEvv + .type _Z2f1IJFvZ4mainE3$_1EEEvv,@function +_Z2f1IJFvZ4mainE3$_1EEEvv: # @"_Z2f1IJFvZ4mainE3$_1EEEvv" .Lfunc_begin126: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp246: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp247: .Lfunc_end126: - .size _Z2f1IJFvZ4mainE3$_2EEEvv, .Lfunc_end126-_Z2f1IJFvZ4mainE3$_2EEEvv + .size _Z2f1IJFvZ4mainE3$_1EEEvv, .Lfunc_end126-_Z2f1IJFvZ4mainE3$_1EEEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv - .type _Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv,@function -_Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv: # @"_Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv" + .p2align 4 # -- Begin function _Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv + .type _Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv,@function +_Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv: # @"_Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv" .Lfunc_begin127: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp248: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp249: .Lfunc_end127: - .size _Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv, .Lfunc_end127-_Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv + .size _Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv, .Lfunc_end127-_Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJFvZ4mainE2t8EEEvv + .p2align 4 # -- Begin function _Z2f1IJFvZ4mainE2t8EEEvv .type _Z2f1IJFvZ4mainE2t8EEEvv,@function _Z2f1IJFvZ4mainE2t8EEEvv: # @_Z2f1IJFvZ4mainE2t8EEEvv .Lfunc_begin128: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp250: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3445,20 +3457,20 @@ _Z2f1IJFvZ4mainE2t8EEEvv: # @_Z2f1IJFvZ4mainE2t8EEEvv # -- End function .section .text._Z19operator_not_reallyIiEvv,"axG",@progbits,_Z19operator_not_reallyIiEvv,comdat .weak _Z19operator_not_reallyIiEvv # -- Begin function _Z19operator_not_reallyIiEvv - .p2align 4, 0x90 + .p2align 4 .type _Z19operator_not_reallyIiEvv,@function _Z19operator_not_reallyIiEvv: # @_Z19operator_not_reallyIiEvv .Lfunc_begin129: - .loc 0 171 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:171:0 + .loc 0 173 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:173:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp252: - .loc 0 172 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:172:1 + .loc 0 174 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:174:1 popq %rbp .cfi_def_cfa %rsp, 8 retq @@ -3467,219 +3479,340 @@ _Z19operator_not_reallyIiEvv: # @_Z19operator_not_reallyIiEvv .size _Z19operator_not_reallyIiEvv, .Lfunc_end129-_Z19operator_not_reallyIiEvv .cfi_endproc # -- End function - .section .text._Z2f1IJDB3_EEvv,"axG",@progbits,_Z2f1IJDB3_EEvv,comdat - .weak _Z2f1IJDB3_EEvv # -- Begin function _Z2f1IJDB3_EEvv - .p2align 4, 0x90 - .type _Z2f1IJDB3_EEvv,@function -_Z2f1IJDB3_EEvv: # @_Z2f1IJDB3_EEvv + .section .text._Z3f11IDB3_TnT_LS0_2EEvv,"axG",@progbits,_Z3f11IDB3_TnT_LS0_2EEvv,comdat + .weak _Z3f11IDB3_TnT_LS0_2EEvv # -- Begin function _Z3f11IDB3_TnT_LS0_2EEvv + .p2align 4 + .type _Z3f11IDB3_TnT_LS0_2EEvv,@function +_Z3f11IDB3_TnT_LS0_2EEvv: # @_Z3f11IDB3_TnT_LS0_2EEvv .Lfunc_begin130: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 188 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp254: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 188 40 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:40 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp255: .Lfunc_end130: - .size _Z2f1IJDB3_EEvv, .Lfunc_end130-_Z2f1IJDB3_EEvv + .size _Z3f11IDB3_TnT_LS0_2EEvv, .Lfunc_end130-_Z3f11IDB3_TnT_LS0_2EEvv .cfi_endproc # -- End function - .section .text._Z2f1IJKDU5_EEvv,"axG",@progbits,_Z2f1IJKDU5_EEvv,comdat - .weak _Z2f1IJKDU5_EEvv # -- Begin function _Z2f1IJKDU5_EEvv - .p2align 4, 0x90 - .type _Z2f1IJKDU5_EEvv,@function -_Z2f1IJKDU5_EEvv: # @_Z2f1IJKDU5_EEvv + .section .text._Z3f11IKDU5_TnT_LS0_2EEvv,"axG",@progbits,_Z3f11IKDU5_TnT_LS0_2EEvv,comdat + .weak _Z3f11IKDU5_TnT_LS0_2EEvv # -- Begin function _Z3f11IKDU5_TnT_LS0_2EEvv + .p2align 4 + .type _Z3f11IKDU5_TnT_LS0_2EEvv,@function +_Z3f11IKDU5_TnT_LS0_2EEvv: # @_Z3f11IKDU5_TnT_LS0_2EEvv .Lfunc_begin131: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 188 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp256: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 188 40 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:40 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp257: .Lfunc_end131: - .size _Z2f1IJKDU5_EEvv, .Lfunc_end131-_Z2f1IJKDU5_EEvv + .size _Z3f11IKDU5_TnT_LS0_2EEvv, .Lfunc_end131-_Z3f11IKDU5_TnT_LS0_2EEvv .cfi_endproc # -- End function - .section .text._Z2f1IJFv2t1IJEES1_EEEvv,"axG",@progbits,_Z2f1IJFv2t1IJEES1_EEEvv,comdat - .weak _Z2f1IJFv2t1IJEES1_EEEvv # -- Begin function _Z2f1IJFv2t1IJEES1_EEEvv - .p2align 4, 0x90 - .type _Z2f1IJFv2t1IJEES1_EEEvv,@function -_Z2f1IJFv2t1IJEES1_EEEvv: # @_Z2f1IJFv2t1IJEES1_EEEvv + .section .text._Z3f11IDB65_TnT_LS0_2EEvv,"axG",@progbits,_Z3f11IDB65_TnT_LS0_2EEvv,comdat + .weak _Z3f11IDB65_TnT_LS0_2EEvv # -- Begin function _Z3f11IDB65_TnT_LS0_2EEvv + .p2align 4 + .type _Z3f11IDB65_TnT_LS0_2EEvv,@function +_Z3f11IDB65_TnT_LS0_2EEvv: # @_Z3f11IDB65_TnT_LS0_2EEvv .Lfunc_begin132: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 188 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp258: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 188 40 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:40 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp259: .Lfunc_end132: - .size _Z2f1IJFv2t1IJEES1_EEEvv, .Lfunc_end132-_Z2f1IJFv2t1IJEES1_EEEvv + .size _Z3f11IDB65_TnT_LS0_2EEvv, .Lfunc_end132-_Z3f11IDB65_TnT_LS0_2EEvv .cfi_endproc # -- End function - .section .text._Z2f1IJM2t1IJEEiEEvv,"axG",@progbits,_Z2f1IJM2t1IJEEiEEvv,comdat - .weak _Z2f1IJM2t1IJEEiEEvv # -- Begin function _Z2f1IJM2t1IJEEiEEvv - .p2align 4, 0x90 - .type _Z2f1IJM2t1IJEEiEEvv,@function -_Z2f1IJM2t1IJEEiEEvv: # @_Z2f1IJM2t1IJEEiEEvv + .section .text._Z3f11IKDU65_TnT_LS0_2EEvv,"axG",@progbits,_Z3f11IKDU65_TnT_LS0_2EEvv,comdat + .weak _Z3f11IKDU65_TnT_LS0_2EEvv # -- Begin function _Z3f11IKDU65_TnT_LS0_2EEvv + .p2align 4 + .type _Z3f11IKDU65_TnT_LS0_2EEvv,@function +_Z3f11IKDU65_TnT_LS0_2EEvv: # @_Z3f11IKDU65_TnT_LS0_2EEvv .Lfunc_begin133: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 188 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp260: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 188 40 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:188:40 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp261: .Lfunc_end133: - .size _Z2f1IJM2t1IJEEiEEvv, .Lfunc_end133-_Z2f1IJM2t1IJEEiEEvv + .size _Z3f11IKDU65_TnT_LS0_2EEvv, .Lfunc_end133-_Z3f11IKDU65_TnT_LS0_2EEvv .cfi_endproc # -- End function - .section .text._Z2f1IJU9swiftcallFvvEEEvv,"axG",@progbits,_Z2f1IJU9swiftcallFvvEEEvv,comdat - .weak _Z2f1IJU9swiftcallFvvEEEvv # -- Begin function _Z2f1IJU9swiftcallFvvEEEvv - .p2align 4, 0x90 - .type _Z2f1IJU9swiftcallFvvEEEvv,@function -_Z2f1IJU9swiftcallFvvEEEvv: # @_Z2f1IJU9swiftcallFvvEEEvv + .section .text._Z2f1IJFv2t1IJEES1_EEEvv,"axG",@progbits,_Z2f1IJFv2t1IJEES1_EEEvv,comdat + .weak _Z2f1IJFv2t1IJEES1_EEEvv # -- Begin function _Z2f1IJFv2t1IJEES1_EEEvv + .p2align 4 + .type _Z2f1IJFv2t1IJEES1_EEEvv,@function +_Z2f1IJFv2t1IJEES1_EEEvv: # @_Z2f1IJFv2t1IJEES1_EEEvv .Lfunc_begin134: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp262: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp263: .Lfunc_end134: - .size _Z2f1IJU9swiftcallFvvEEEvv, .Lfunc_end134-_Z2f1IJU9swiftcallFvvEEEvv + .size _Z2f1IJFv2t1IJEES1_EEEvv, .Lfunc_end134-_Z2f1IJFv2t1IJEES1_EEEvv .cfi_endproc # -- End function - .text - .globl _ZN2t83memEv # -- Begin function _ZN2t83memEv - .p2align 4, 0x90 - .type _ZN2t83memEv,@function -_ZN2t83memEv: # @_ZN2t83memEv + .section .text._Z2f1IJM2t1IJEEiEEvv,"axG",@progbits,_Z2f1IJM2t1IJEEiEEvv,comdat + .weak _Z2f1IJM2t1IJEEiEEvv # -- Begin function _Z2f1IJM2t1IJEEiEEvv + .p2align 4 + .type _Z2f1IJM2t1IJEEiEEvv,@function +_Z2f1IJM2t1IJEEiEEvv: # @_Z2f1IJM2t1IJEEiEEvv .Lfunc_begin135: - .loc 0 329 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:329:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp - subq $16, %rsp - movq %rdi, -8(%rbp) .Ltmp264: - .loc 0 331 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:331:3 - callq _Z2f1IJZN2t83memEvE2t7EEvv - .loc 0 332 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:332:3 - callq _Z2f1IJM2t8FvvEEEvv - .loc 0 333 1 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:333:1 - addq $16, %rsp + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp265: .Lfunc_end135: - .size _ZN2t83memEv, .Lfunc_end135-_ZN2t83memEv + .size _Z2f1IJM2t1IJEEiEEvv, .Lfunc_end135-_Z2f1IJM2t1IJEEiEEvv .cfi_endproc # -- End function - .p2align 4, 0x90 # -- Begin function _Z2f1IJZN2t83memEvE2t7EEvv - .type _Z2f1IJZN2t83memEvE2t7EEvv,@function -_Z2f1IJZN2t83memEvE2t7EEvv: # @_Z2f1IJZN2t83memEvE2t7EEvv + .section .text._Z2f1IJU9swiftcallFvvEEEvv,"axG",@progbits,_Z2f1IJU9swiftcallFvvEEEvv,comdat + .weak _Z2f1IJU9swiftcallFvvEEEvv # -- Begin function _Z2f1IJU9swiftcallFvvEEEvv + .p2align 4 + .type _Z2f1IJU9swiftcallFvvEEEvv,@function +_Z2f1IJU9swiftcallFvvEEEvv: # @_Z2f1IJU9swiftcallFvvEEEvv .Lfunc_begin136: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp266: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp267: .Lfunc_end136: - .size _Z2f1IJZN2t83memEvE2t7EEvv, .Lfunc_end136-_Z2f1IJZN2t83memEvE2t7EEvv + .size _Z2f1IJU9swiftcallFvvEEEvv, .Lfunc_end136-_Z2f1IJU9swiftcallFvvEEEvv .cfi_endproc # -- End function - .section .text._Z2f1IJM2t8FvvEEEvv,"axG",@progbits,_Z2f1IJM2t8FvvEEEvv,comdat - .weak _Z2f1IJM2t8FvvEEEvv # -- Begin function _Z2f1IJM2t8FvvEEEvv - .p2align 4, 0x90 - .type _Z2f1IJM2t8FvvEEEvv,@function -_Z2f1IJM2t8FvvEEEvv: # @_Z2f1IJM2t8FvvEEEvv + .section .text._Z2f1IJFivEEEvv,"axG",@progbits,_Z2f1IJFivEEEvv,comdat + .weak _Z2f1IJFivEEEvv # -- Begin function _Z2f1IJFivEEEvv + .p2align 4 + .type _Z2f1IJFivEEEvv,@function +_Z2f1IJFivEEEvv: # @_Z2f1IJFivEEEvv .Lfunc_begin137: - .loc 0 33 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:33:0 + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 .cfi_startproc -# %bb.0: +# %bb.0: # %entry pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp .Ltmp268: - .loc 0 36 1 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:36:1 + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 popq %rbp .cfi_def_cfa %rsp, 8 retq .Ltmp269: .Lfunc_end137: - .size _Z2f1IJM2t8FvvEEEvv, .Lfunc_end137-_Z2f1IJM2t8FvvEEEvv + .size _Z2f1IJFivEEEvv, .Lfunc_end137-_Z2f1IJFivEEEvv .cfi_endproc # -- End function - .type i,@object # @i - .data - .globl i - .p2align 2 -i: - .long 3 # 0x3 - .size i, 4 - - .type .L__const.main.L,@object # @__const.main.L - .section .rodata,"a",@progbits -.L__const.main.L: - .zero 1 - .size .L__const.main.L, 1 - - .section ".linker-options","e",@llvm_linker_options - .section .debug_abbrev,"",@progbits + .text + .p2align 4 # -- Begin function _Z3f10ILN2ns3$_0E0EEvv + .type _Z3f10ILN2ns3$_0E0EEvv,@function +_Z3f10ILN2ns3$_0E0EEvv: # @"_Z3f10ILN2ns3$_0E0EEvv" +.Lfunc_begin138: + .loc 0 185 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:185:0 + .cfi_startproc +# %bb.0: # %entry + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp +.Ltmp270: + .loc 0 186 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:186:1 + popq %rbp + .cfi_def_cfa %rsp, 8 + retq +.Ltmp271: +.Lfunc_end138: + .size _Z3f10ILN2ns3$_0E0EEvv, .Lfunc_end138-_Z3f10ILN2ns3$_0E0EEvv + .cfi_endproc + # -- End function + .globl _ZN2t83memEv # -- Begin function _ZN2t83memEv + .p2align 4 + .type _ZN2t83memEv,@function +_ZN2t83memEv: # @_ZN2t83memEv +.Lfunc_begin139: + .loc 0 342 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:342:0 + .cfi_startproc +# %bb.0: # %entry + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp + subq $16, %rsp + movq %rdi, -8(%rbp) +.Ltmp272: + .loc 0 344 3 prologue_end # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:344:3 + callq _Z2f1IJZN2t83memEvE2t7EEvv + .loc 0 345 3 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:345:3 + callq _Z2f1IJM2t8FvvEEEvv + .loc 0 346 1 epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:346:1 + addq $16, %rsp + popq %rbp + .cfi_def_cfa %rsp, 8 + retq +.Ltmp273: +.Lfunc_end139: + .size _ZN2t83memEv, .Lfunc_end139-_ZN2t83memEv + .cfi_endproc + # -- End function + .p2align 4 # -- Begin function _Z2f1IJZN2t83memEvE2t7EEvv + .type _Z2f1IJZN2t83memEvE2t7EEvv,@function +_Z2f1IJZN2t83memEvE2t7EEvv: # @_Z2f1IJZN2t83memEvE2t7EEvv +.Lfunc_begin140: + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 + .cfi_startproc +# %bb.0: # %entry + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp +.Ltmp274: + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 + popq %rbp + .cfi_def_cfa %rsp, 8 + retq +.Ltmp275: +.Lfunc_end140: + .size _Z2f1IJZN2t83memEvE2t7EEvv, .Lfunc_end140-_Z2f1IJZN2t83memEvE2t7EEvv + .cfi_endproc + # -- End function + .section .text._Z2f1IJM2t8FvvEEEvv,"axG",@progbits,_Z2f1IJM2t8FvvEEEvv,comdat + .weak _Z2f1IJM2t8FvvEEEvv # -- Begin function _Z2f1IJM2t8FvvEEEvv + .p2align 4 + .type _Z2f1IJM2t8FvvEEEvv,@function +_Z2f1IJM2t8FvvEEEvv: # @_Z2f1IJM2t8FvvEEEvv +.Lfunc_begin141: + .loc 0 35 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:35:0 + .cfi_startproc +# %bb.0: # %entry + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp +.Ltmp276: + .loc 0 38 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:38:1 + popq %rbp + .cfi_def_cfa %rsp, 8 + retq +.Ltmp277: +.Lfunc_end141: + .size _Z2f1IJM2t8FvvEEEvv, .Lfunc_end141-_Z2f1IJM2t8FvvEEEvv + .cfi_endproc + # -- End function + .text + .globl _ZN18complex_type_units2f1Ev # -- Begin function _ZN18complex_type_units2f1Ev + .p2align 4 + .type _ZN18complex_type_units2f1Ev,@function +_ZN18complex_type_units2f1Ev: # @_ZN18complex_type_units2f1Ev +.Lfunc_begin142: + .loc 0 360 0 # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:360:0 + .cfi_startproc +# %bb.0: # %entry + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp +.Ltmp278: + .loc 0 363 1 prologue_end epilogue_begin # cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:363:1 + popq %rbp + .cfi_def_cfa %rsp, 8 + retq +.Ltmp279: +.Lfunc_end142: + .size _ZN18complex_type_units2f1Ev, .Lfunc_end142-_ZN18complex_type_units2f1Ev + .cfi_endproc + # -- End function + .type i,@object # @i + .data + .globl i + .p2align 2, 0x0 +i: + .long 3 # 0x3 + .size i, 4 + + .type .L__const.main.L,@object # @__const.main.L + .section .rodata,"a",@progbits +.L__const.main.L: + .zero 1 + .size .L__const.main.L, 1 + + .file 2 "builds/release/lib/clang/22/include" "stdint.h" md5 0xa47a6a6c7fcbc62776237de6abac9549 + .file 3 "builds/release/bin/../include/c++/v1" "cstdint" + .file 4 "builds/release/lib/clang/22/include" "__stddef_max_align_t.h" md5 0x3c0a2f19d136d39aa835c737c7105def + .file 5 "builds/release/bin/../include/c++/v1/__cstddef" "max_align_t.h" + .section .debug_abbrev,"",@progbits .byte 1 # Abbreviation Code .byte 17 # DW_TAG_compile_unit .byte 1 # DW_CHILDREN_yes @@ -3779,6 +3912,15 @@ i: .byte 0 # EOM(1) .byte 0 # EOM(2) .byte 9 # Abbreviation Code + .byte 40 # DW_TAG_enumerator + .byte 0 # DW_CHILDREN_no + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .byte 28 # DW_AT_const_value + .byte 13 # DW_FORM_sdata + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 10 # Abbreviation Code .byte 4 # DW_TAG_enumeration_type .byte 1 # DW_CHILDREN_yes .byte 73 # DW_AT_type @@ -3795,15 +3937,6 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 10 # Abbreviation Code - .byte 40 # DW_TAG_enumerator - .byte 0 # DW_CHILDREN_no - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 28 # DW_AT_const_value - .byte 13 # DW_FORM_sdata - .byte 0 # EOM(1) - .byte 0 # EOM(2) .byte 11 # Abbreviation Code .byte 4 # DW_TAG_enumeration_type .byte 1 # DW_CHILDREN_yes @@ -3887,6 +4020,8 @@ i: .byte 17 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes + .byte 110 # DW_AT_linkage_name + .byte 37 # DW_FORM_strx1 .byte 3 # DW_AT_name .byte 37 # DW_FORM_strx1 .byte 58 # DW_AT_decl_file @@ -3904,8 +4039,6 @@ i: .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name .byte 37 # DW_FORM_strx1 - .byte 30 # DW_AT_default_value - .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) .byte 19 # Abbreviation Code @@ -3918,43 +4051,6 @@ i: .byte 0 # EOM(1) .byte 0 # EOM(2) .byte 20 # Abbreviation Code - .byte 8 # DW_TAG_imported_declaration - .byte 0 # DW_CHILDREN_no - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 11 # DW_FORM_data1 - .byte 24 # DW_AT_import - .byte 19 # DW_FORM_ref4 - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 21 # Abbreviation Code - .byte 22 # DW_TAG_typedef - .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 5 # DW_FORM_data2 - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 22 # Abbreviation Code - .byte 22 # DW_TAG_typedef - .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 11 # DW_FORM_data1 - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 23 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -3975,7 +4071,7 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 24 # Abbreviation Code + .byte 21 # Abbreviation Code .byte 5 # DW_TAG_formal_parameter .byte 0 # DW_CHILDREN_no .byte 2 # DW_AT_location @@ -3988,7 +4084,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 25 # Abbreviation Code + .byte 22 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4009,7 +4105,7 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 26 # Abbreviation Code + .byte 23 # Abbreviation Code .byte 52 # DW_TAG_variable .byte 0 # DW_CHILDREN_no .byte 2 # DW_AT_location @@ -4024,7 +4120,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 27 # Abbreviation Code + .byte 24 # Abbreviation Code .byte 52 # DW_TAG_variable .byte 0 # DW_CHILDREN_no .byte 2 # DW_AT_location @@ -4039,7 +4135,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 28 # Abbreviation Code + .byte 25 # Abbreviation Code .byte 52 # DW_TAG_variable .byte 0 # DW_CHILDREN_no .byte 2 # DW_AT_location @@ -4054,7 +4150,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 29 # Abbreviation Code + .byte 26 # Abbreviation Code .byte 58 # DW_TAG_imported_module .byte 0 # DW_CHILDREN_no .byte 58 # DW_AT_decl_file @@ -4065,7 +4161,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 30 # Abbreviation Code + .byte 27 # Abbreviation Code .byte 2 # DW_TAG_class_type .byte 0 # DW_CHILDREN_no .byte 54 # DW_AT_calling_convention @@ -4078,7 +4174,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 31 # Abbreviation Code + .byte 28 # Abbreviation Code .byte 19 # DW_TAG_structure_type .byte 0 # DW_CHILDREN_no .byte 54 # DW_AT_calling_convention @@ -4091,7 +4187,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 32 # Abbreviation Code + .byte 29 # Abbreviation Code .byte 19 # DW_TAG_structure_type .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name @@ -4100,26 +4196,26 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 33 # Abbreviation Code + .byte 30 # Abbreviation Code .ascii "\207\202\001" # DW_TAG_GNU_template_parameter_pack .byte 1 # DW_CHILDREN_yes .byte 3 # DW_AT_name .byte 37 # DW_FORM_strx1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 34 # Abbreviation Code + .byte 31 # Abbreviation Code .byte 47 # DW_TAG_template_type_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 35 # Abbreviation Code + .byte 32 # Abbreviation Code .byte 47 # DW_TAG_template_type_parameter .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 36 # Abbreviation Code + .byte 33 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4130,7 +4226,7 @@ i: .byte 15 # DW_FORM_udata .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 37 # Abbreviation Code + .byte 34 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4141,25 +4237,25 @@ i: .byte 13 # DW_FORM_sdata .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 38 # Abbreviation Code + .byte 35 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 28 # DW_AT_const_value - .byte 15 # DW_FORM_udata + .byte 13 # DW_FORM_sdata .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 39 # Abbreviation Code + .byte 36 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 28 # DW_AT_const_value - .byte 13 # DW_FORM_sdata + .byte 15 # DW_FORM_udata .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 40 # Abbreviation Code + .byte 37 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4178,7 +4274,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 41 # Abbreviation Code + .byte 38 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4187,7 +4283,7 @@ i: .byte 24 # DW_FORM_exprloc .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 42 # Abbreviation Code + .byte 39 # Abbreviation Code .byte 48 # DW_TAG_template_value_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4196,37 +4292,7 @@ i: .byte 10 # DW_FORM_block1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 43 # Abbreviation Code - .byte 48 # DW_TAG_template_value_parameter - .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 30 # DW_AT_default_value - .byte 25 # DW_FORM_flag_present - .byte 28 # DW_AT_const_value - .byte 15 # DW_FORM_udata - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 44 # Abbreviation Code - .byte 46 # DW_TAG_subprogram - .byte 1 # DW_CHILDREN_yes - .byte 17 # DW_AT_low_pc - .byte 27 # DW_FORM_addrx - .byte 18 # DW_AT_high_pc - .byte 6 # DW_FORM_data4 - .byte 64 # DW_AT_frame_base - .byte 24 # DW_FORM_exprloc - .byte 110 # DW_AT_linkage_name - .byte 37 # DW_FORM_strx1 - .byte 3 # DW_AT_name - .byte 38 # DW_FORM_strx2 - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 11 # DW_FORM_data1 - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 45 # Abbreviation Code + .byte 40 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4245,48 +4311,44 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 46 # Abbreviation Code + .byte 41 # Abbreviation Code .ascii "\207\202\001" # DW_TAG_GNU_template_parameter_pack .byte 1 # DW_CHILDREN_yes .byte 3 # DW_AT_name .byte 38 # DW_FORM_strx2 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 47 # Abbreviation Code + .byte 42 # Abbreviation Code .byte 47 # DW_TAG_template_type_parameter .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 3 # DW_AT_name .byte 38 # DW_FORM_strx2 - .byte 30 # DW_AT_default_value - .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 48 # Abbreviation Code + .byte 43 # Abbreviation Code .ascii "\207\202\001" # DW_TAG_GNU_template_parameter_pack .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name .byte 38 # DW_FORM_strx2 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 49 # Abbreviation Code - .byte 47 # DW_TAG_template_type_parameter + .byte 44 # Abbreviation Code + .ascii "\207\202\001" # DW_TAG_GNU_template_parameter_pack .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 .byte 3 # DW_AT_name - .byte 38 # DW_FORM_strx2 + .byte 37 # DW_FORM_strx1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 50 # Abbreviation Code - .ascii "\207\202\001" # DW_TAG_GNU_template_parameter_pack + .byte 45 # Abbreviation Code + .byte 5 # DW_TAG_formal_parameter .byte 0 # DW_CHILDREN_no - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 51 # Abbreviation Code + .byte 46 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 110 # DW_AT_linkage_name @@ -4297,57 +4359,22 @@ i: .byte 11 # DW_FORM_data1 .byte 59 # DW_AT_decl_line .byte 11 # DW_FORM_data1 + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 .byte 60 # DW_AT_declaration .byte 25 # DW_FORM_flag_present .byte 63 # DW_AT_external .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 52 # Abbreviation Code - .byte 5 # DW_TAG_formal_parameter + .byte 47 # Abbreviation Code + .byte 15 # DW_TAG_pointer_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 53 # Abbreviation Code - .byte 46 # DW_TAG_subprogram - .byte 1 # DW_CHILDREN_yes - .byte 110 # DW_AT_linkage_name - .byte 37 # DW_FORM_strx1 - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 58 # DW_AT_decl_file - .byte 11 # DW_FORM_data1 - .byte 59 # DW_AT_decl_line - .byte 11 # DW_FORM_data1 - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 60 # DW_AT_declaration - .byte 25 # DW_FORM_flag_present - .byte 63 # DW_AT_external - .byte 25 # DW_FORM_flag_present - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 54 # Abbreviation Code - .byte 47 # DW_TAG_template_type_parameter - .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 3 # DW_AT_name - .byte 37 # DW_FORM_strx1 - .byte 30 # DW_AT_default_value - .byte 25 # DW_FORM_flag_present - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 55 # Abbreviation Code - .byte 15 # DW_TAG_pointer_type - .byte 0 # DW_CHILDREN_no - .byte 73 # DW_AT_type - .byte 19 # DW_FORM_ref4 - .byte 0 # EOM(1) - .byte 0 # EOM(2) - .byte 56 # Abbreviation Code + .byte 48 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4362,7 +4389,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 57 # Abbreviation Code + .byte 49 # Abbreviation Code .byte 5 # DW_TAG_formal_parameter .byte 0 # DW_CHILDREN_no .byte 2 # DW_AT_location @@ -4375,12 +4402,45 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 58 # Abbreviation Code + .byte 50 # Abbreviation Code .byte 15 # DW_TAG_pointer_type .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 59 # Abbreviation Code + .byte 51 # Abbreviation Code + .byte 57 # DW_TAG_namespace + .byte 1 # DW_CHILDREN_yes + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .ascii "\211\001" # DW_AT_export_symbols + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 52 # Abbreviation Code + .byte 22 # DW_TAG_typedef + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 11 # DW_FORM_data1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 53 # Abbreviation Code + .byte 8 # DW_TAG_imported_declaration + .byte 0 # DW_CHILDREN_no + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 11 # DW_FORM_data1 + .byte 24 # DW_AT_import + .byte 19 # DW_FORM_ref4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 54 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4393,7 +4453,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 60 # Abbreviation Code + .byte 55 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4410,7 +4470,7 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 61 # Abbreviation Code + .byte 56 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4433,7 +4493,40 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 62 # Abbreviation Code + .byte 57 # Abbreviation Code + .byte 48 # DW_TAG_template_value_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 28 # DW_AT_const_value + .byte 13 # DW_FORM_sdata + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 58 # Abbreviation Code + .byte 48 # DW_TAG_template_value_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 28 # DW_AT_const_value + .byte 15 # DW_FORM_udata + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 59 # Abbreviation Code + .byte 48 # DW_TAG_template_value_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 28 # DW_AT_const_value + .byte 10 # DW_FORM_block1 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 60 # Abbreviation Code .byte 46 # DW_TAG_subprogram .byte 1 # DW_CHILDREN_yes .byte 17 # DW_AT_low_pc @@ -4450,35 +4543,165 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) + .byte 61 # Abbreviation Code + .byte 46 # DW_TAG_subprogram + .byte 1 # DW_CHILDREN_yes + .byte 17 # DW_AT_low_pc + .byte 27 # DW_FORM_addrx + .byte 18 # DW_AT_high_pc + .byte 6 # DW_FORM_data4 + .byte 64 # DW_AT_frame_base + .byte 24 # DW_FORM_exprloc + .byte 110 # DW_AT_linkage_name + .byte 38 # DW_FORM_strx2 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 63 # DW_AT_external + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 62 # Abbreviation Code + .byte 19 # DW_TAG_structure_type + .byte 1 # DW_CHILDREN_yes + .byte 54 # DW_AT_calling_convention + .byte 11 # DW_FORM_data1 + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .byte 11 # DW_AT_byte_size + .byte 11 # DW_FORM_data1 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 0 # EOM(1) + .byte 0 # EOM(2) .byte 63 # Abbreviation Code - .byte 16 # DW_TAG_reference_type + .byte 13 # DW_TAG_member .byte 0 # DW_CHILDREN_no + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 56 # DW_AT_data_member_location + .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) .byte 64 # Abbreviation Code + .byte 19 # DW_TAG_structure_type + .byte 1 # DW_CHILDREN_yes + .byte 54 # DW_AT_calling_convention + .byte 11 # DW_FORM_data1 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 11 # DW_AT_byte_size + .byte 11 # DW_FORM_data1 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 65 # Abbreviation Code + .byte 47 # DW_TAG_template_type_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 30 # DW_AT_default_value + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 66 # Abbreviation Code + .byte 2 # DW_TAG_class_type + .byte 1 # DW_CHILDREN_yes + .byte 54 # DW_AT_calling_convention + .byte 11 # DW_FORM_data1 + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 11 # DW_AT_byte_size + .byte 11 # DW_FORM_data1 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 67 # Abbreviation Code + .byte 19 # DW_TAG_structure_type + .byte 1 # DW_CHILDREN_yes + .byte 3 # DW_AT_name + .byte 38 # DW_FORM_strx2 + .byte 60 # DW_AT_declaration + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 68 # Abbreviation Code + .byte 48 # DW_TAG_template_value_parameter + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 30 # DW_AT_default_value + .byte 25 # DW_FORM_flag_present + .byte 2 # DW_AT_location + .byte 24 # DW_FORM_exprloc + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 69 # Abbreviation Code + .byte 22 # DW_TAG_typedef + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 3 # DW_AT_name + .byte 37 # DW_FORM_strx1 + .byte 58 # DW_AT_decl_file + .byte 11 # DW_FORM_data1 + .byte 59 # DW_AT_decl_line + .byte 5 # DW_FORM_data2 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 70 # Abbreviation Code + .byte 19 # DW_TAG_structure_type + .byte 0 # DW_CHILDREN_no + .byte 60 # DW_AT_declaration + .byte 25 # DW_FORM_flag_present + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 71 # Abbreviation Code + .byte 16 # DW_TAG_reference_type + .byte 0 # DW_CHILDREN_no + .byte 73 # DW_AT_type + .byte 19 # DW_FORM_ref4 + .byte 0 # EOM(1) + .byte 0 # EOM(2) + .byte 72 # Abbreviation Code .byte 66 # DW_TAG_rvalue_reference_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 65 # Abbreviation Code + .byte 73 # Abbreviation Code .byte 38 # DW_TAG_const_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 66 # Abbreviation Code + .byte 74 # Abbreviation Code .byte 1 # DW_TAG_array_type .byte 1 # DW_CHILDREN_yes .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 67 # Abbreviation Code + .byte 75 # Abbreviation Code .byte 33 # DW_TAG_subrange_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4487,7 +4710,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 68 # Abbreviation Code + .byte 76 # Abbreviation Code .byte 36 # DW_TAG_base_type .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name @@ -4498,7 +4721,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 69 # Abbreviation Code + .byte 77 # Abbreviation Code .byte 19 # DW_TAG_structure_type .byte 1 # DW_CHILDREN_yes .byte 3 # DW_AT_name @@ -4507,41 +4730,41 @@ i: .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 70 # Abbreviation Code + .byte 78 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 1 # DW_CHILDREN_yes .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 71 # Abbreviation Code + .byte 79 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 1 # DW_CHILDREN_yes .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 72 # Abbreviation Code + .byte 80 # Abbreviation Code .byte 24 # DW_TAG_unspecified_parameters .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 73 # Abbreviation Code + .byte 81 # Abbreviation Code .byte 59 # DW_TAG_unspecified_type .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name - .byte 38 # DW_FORM_strx2 + .byte 37 # DW_FORM_strx1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 74 # Abbreviation Code + .byte 82 # Abbreviation Code .byte 38 # DW_TAG_const_type .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 75 # Abbreviation Code + .byte 83 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 76 # Abbreviation Code + .byte 84 # Abbreviation Code .byte 19 # DW_TAG_structure_type .byte 1 # DW_CHILDREN_yes .byte 54 # DW_AT_calling_convention @@ -4556,28 +4779,28 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 77 # Abbreviation Code + .byte 85 # Abbreviation Code .byte 33 # DW_TAG_subrange_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 78 # Abbreviation Code + .byte 86 # Abbreviation Code .byte 71 # DW_TAG_atomic_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 79 # Abbreviation Code + .byte 87 # Abbreviation Code .byte 53 # DW_TAG_volatile_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 80 # Abbreviation Code + .byte 88 # Abbreviation Code .byte 1 # DW_TAG_array_type .byte 1 # DW_CHILDREN_yes .ascii "\207B" # DW_AT_GNU_vector @@ -4586,12 +4809,12 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 81 # Abbreviation Code + .byte 89 # Abbreviation Code .byte 53 # DW_TAG_volatile_type .byte 0 # DW_CHILDREN_no .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 82 # Abbreviation Code + .byte 90 # Abbreviation Code .byte 31 # DW_TAG_ptr_to_member_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4600,35 +4823,35 @@ i: .byte 19 # DW_FORM_ref4 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 83 # Abbreviation Code + .byte 91 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 1 # DW_CHILDREN_yes .byte 119 # DW_AT_reference .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 84 # Abbreviation Code + .byte 92 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 1 # DW_CHILDREN_yes .byte 120 # DW_AT_rvalue_reference .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 85 # Abbreviation Code + .byte 93 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 0 # DW_CHILDREN_no .byte 119 # DW_AT_reference .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 86 # Abbreviation Code + .byte 94 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 0 # DW_CHILDREN_no .byte 120 # DW_AT_rvalue_reference .byte 25 # DW_FORM_flag_present .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 87 # Abbreviation Code + .byte 95 # Abbreviation Code .byte 36 # DW_TAG_base_type .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name @@ -4637,27 +4860,25 @@ i: .byte 11 # DW_FORM_data1 .byte 11 # DW_AT_byte_size .byte 11 # DW_FORM_data1 + .byte 13 # DW_AT_bit_size + .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 88 # Abbreviation Code + .byte 96 # Abbreviation Code .byte 21 # DW_TAG_subroutine_type .byte 0 # DW_CHILDREN_no .byte 54 # DW_AT_calling_convention .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 89 # Abbreviation Code - .byte 48 # DW_TAG_template_value_parameter + .byte 97 # Abbreviation Code + .byte 21 # DW_TAG_subroutine_type .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type .byte 19 # DW_FORM_ref4 - .byte 3 # DW_AT_name - .byte 38 # DW_FORM_strx2 - .byte 28 # DW_AT_const_value - .byte 15 # DW_FORM_udata .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 90 # Abbreviation Code + .byte 98 # Abbreviation Code .byte 22 # DW_TAG_typedef .byte 0 # DW_CHILDREN_no .byte 73 # DW_AT_type @@ -4670,7 +4891,7 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 91 # Abbreviation Code + .byte 99 # Abbreviation Code .byte 13 # DW_TAG_member .byte 0 # DW_CHILDREN_no .byte 3 # DW_AT_name @@ -4685,15 +4906,6 @@ i: .byte 11 # DW_FORM_data1 .byte 0 # EOM(1) .byte 0 # EOM(2) - .byte 92 # Abbreviation Code - .byte 19 # DW_TAG_structure_type - .byte 1 # DW_CHILDREN_yes - .byte 3 # DW_AT_name - .byte 38 # DW_FORM_strx2 - .byte 60 # DW_AT_declaration - .byte 25 # DW_FORM_flag_present - .byte 0 # EOM(1) - .byte 0 # EOM(2) .byte 0 # EOM(3) .section .debug_info,"",@progbits .Lcu_begin0: @@ -4703,7 +4915,7 @@ i: .byte 1 # DWARF Unit Type .byte 8 # Address Size (in bytes) .long .debug_abbrev # Offset Into Abbrev. Section - .byte 1 # Abbrev [1] 0xc:0x295d DW_TAG_compile_unit + .byte 1 # Abbrev [1] 0xc:0x29ba DW_TAG_compile_unit .byte 0 # DW_AT_producer .short 33 # DW_AT_language .byte 1 # DW_AT_name @@ -4719,7 +4931,7 @@ i: .long 54 # DW_AT_type # DW_AT_external .byte 0 # DW_AT_decl_file - .byte 54 # DW_AT_decl_line + .byte 56 # DW_AT_decl_line .byte 2 # DW_AT_location .byte 161 .byte 0 @@ -4733,13 +4945,13 @@ i: .byte 7 # DW_AT_name .byte 4 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 59 # DW_AT_decl_line + .byte 61 # DW_AT_decl_line .byte 6 # Abbrev [6] 0x44:0x3 DW_TAG_enumerator .byte 6 # DW_AT_name .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 7 # Abbrev [7] 0x48:0x2 DW_TAG_structure_type - .byte 254 # DW_AT_name + .byte 240 # DW_AT_name # DW_AT_declaration .byte 0 # End Of Children Mark .byte 3 # Abbrev [3] 0x4b:0x4 DW_TAG_base_type @@ -4749,35 +4961,35 @@ i: .byte 8 # Abbrev [8] 0x4f:0x63 DW_TAG_namespace .byte 8 # DW_AT_name .byte 5 # Abbrev [5] 0x51:0x13 DW_TAG_enumeration_type - .long 75 # DW_AT_type + .long 54 # DW_AT_type .byte 12 # DW_AT_name .byte 4 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 27 # DW_AT_decl_line - .byte 6 # Abbrev [6] 0x5a:0x3 DW_TAG_enumerator + .byte 29 # DW_AT_decl_line + .byte 9 # Abbrev [9] 0x5a:0x3 DW_TAG_enumerator .byte 9 # DW_AT_name .byte 0 # DW_AT_const_value - .byte 6 # Abbrev [6] 0x5d:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x5d:0x3 DW_TAG_enumerator .byte 10 # DW_AT_name .byte 1 # DW_AT_const_value - .byte 6 # Abbrev [6] 0x60:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x60:0x3 DW_TAG_enumerator .byte 11 # DW_AT_name .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 9 # Abbrev [9] 0x64:0x13 DW_TAG_enumeration_type + .byte 10 # Abbrev [10] 0x64:0x13 DW_TAG_enumeration_type .long 54 # DW_AT_type # DW_AT_enum_class .byte 13 # DW_AT_name .byte 4 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 28 # DW_AT_decl_line - .byte 10 # Abbrev [10] 0x6d:0x3 DW_TAG_enumerator + .byte 30 # DW_AT_decl_line + .byte 9 # Abbrev [9] 0x6d:0x3 DW_TAG_enumerator .byte 9 # DW_AT_name .byte 0 # DW_AT_const_value - .byte 10 # Abbrev [10] 0x70:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x70:0x3 DW_TAG_enumerator .byte 10 # DW_AT_name .byte 1 # DW_AT_const_value - .byte 10 # Abbrev [10] 0x73:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x73:0x3 DW_TAG_enumerator .byte 11 # DW_AT_name .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark @@ -4786,23 +4998,23 @@ i: .byte 16 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 30 # DW_AT_decl_line + .byte 32 # DW_AT_decl_line .byte 6 # Abbrev [6] 0x80:0x4 DW_TAG_enumerator .byte 15 # DW_AT_name .ascii "\377\001" # DW_AT_const_value .byte 0 # End Of Children Mark .byte 11 # Abbrev [11] 0x85:0x12 DW_TAG_enumeration_type - .long 75 # DW_AT_type + .long 54 # DW_AT_type .byte 4 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 29 # DW_AT_decl_line - .byte 6 # Abbrev [6] 0x8d:0x3 DW_TAG_enumerator + .byte 31 # DW_AT_decl_line + .byte 9 # Abbrev [9] 0x8d:0x3 DW_TAG_enumerator .byte 17 # DW_AT_name .byte 0 # DW_AT_const_value - .byte 6 # Abbrev [6] 0x90:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x90:0x3 DW_TAG_enumerator .byte 18 # DW_AT_name .byte 1 # DW_AT_const_value - .byte 6 # Abbrev [6] 0x93:0x3 DW_TAG_enumerator + .byte 9 # Abbrev [9] 0x93:0x3 DW_TAG_enumerator .byte 19 # DW_AT_name .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark @@ -4811,22 +5023,22 @@ i: .long .Lfunc_end100-.Lfunc_begin100 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 308 # DW_AT_linkage_name - .short 309 # DW_AT_name + .short 294 # DW_AT_linkage_name + .short 295 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 26 # DW_AT_decl_line + .byte 28 # DW_AT_decl_line # DW_AT_external .byte 13 # Abbrev [13] 0xa5:0x4 DW_TAG_GNU_template_template_param .byte 20 # DW_AT_name - .short 307 # DW_AT_GNU_template_name + .short 293 # DW_AT_GNU_template_name .byte 0 # End Of Children Mark .byte 7 # Abbrev [7] 0xaa:0x2 DW_TAG_structure_type - .byte 158 # DW_AT_name + .byte 144 # DW_AT_name # DW_AT_declaration .byte 8 # Abbrev [8] 0xac:0x5 DW_TAG_namespace - .byte 165 # DW_AT_name + .byte 151 # DW_AT_name .byte 7 # Abbrev [7] 0xae:0x2 DW_TAG_structure_type - .byte 158 # DW_AT_name + .byte 144 # DW_AT_name # DW_AT_declaration .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark @@ -4839,7 +5051,7 @@ i: .byte 23 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 48 # DW_AT_decl_line + .byte 50 # DW_AT_decl_line .byte 15 # Abbrev [15] 0xbc:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name @@ -4853,1645 +5065,1275 @@ i: .byte 21 # DW_AT_name .byte 2 # DW_AT_encoding .byte 1 # DW_AT_byte_size - .byte 14 # Abbrev [14] 0xce:0x13 DW_TAG_structure_type + .byte 14 # Abbrev [14] 0xce:0x14 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention .byte 24 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 165 # DW_AT_decl_line - .byte 17 # Abbrev [17] 0xd4:0xc DW_TAG_subprogram - .byte 130 # DW_AT_name - .byte 0 # DW_AT_decl_file .byte 167 # DW_AT_decl_line + .byte 17 # Abbrev [17] 0xd4:0xd DW_TAG_subprogram + .byte 81 # DW_AT_linkage_name + .byte 82 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 169 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 18 # Abbrev [18] 0xd8:0x2 DW_TAG_template_type_parameter + .byte 18 # Abbrev [18] 0xd9:0x2 DW_TAG_template_type_parameter .byte 20 # DW_AT_name - # DW_AT_default_value - .byte 19 # Abbrev [19] 0xda:0x5 DW_TAG_formal_parameter - .long 5915 # DW_AT_type + .byte 19 # Abbrev [19] 0xdb:0x5 DW_TAG_formal_parameter + .long 5528 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 8 # Abbrev [8] 0xe1:0xd0 DW_TAG_namespace - .byte 25 # DW_AT_name - .byte 20 # Abbrev [20] 0xe3:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 47 # DW_AT_decl_line - .long 433 # DW_AT_import - .byte 20 # Abbrev [20] 0xea:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 48 # DW_AT_decl_line - .long 453 # DW_AT_import - .byte 20 # Abbrev [20] 0xf1:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 49 # DW_AT_decl_line - .long 473 # DW_AT_import - .byte 20 # Abbrev [20] 0xf8:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 50 # DW_AT_decl_line - .long 489 # DW_AT_import - .byte 20 # Abbrev [20] 0xff:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 52 # DW_AT_decl_line - .long 509 # DW_AT_import - .byte 20 # Abbrev [20] 0x106:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 53 # DW_AT_decl_line - .long 517 # DW_AT_import - .byte 20 # Abbrev [20] 0x10d:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 54 # DW_AT_decl_line - .long 525 # DW_AT_import - .byte 20 # Abbrev [20] 0x114:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 55 # DW_AT_decl_line - .long 533 # DW_AT_import - .byte 20 # Abbrev [20] 0x11b:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 57 # DW_AT_decl_line - .long 541 # DW_AT_import - .byte 20 # Abbrev [20] 0x122:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 58 # DW_AT_decl_line - .long 557 # DW_AT_import - .byte 20 # Abbrev [20] 0x129:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 59 # DW_AT_decl_line - .long 573 # DW_AT_import - .byte 20 # Abbrev [20] 0x130:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 60 # DW_AT_decl_line - .long 589 # DW_AT_import - .byte 20 # Abbrev [20] 0x137:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 62 # DW_AT_decl_line - .long 605 # DW_AT_import - .byte 20 # Abbrev [20] 0x13e:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 63 # DW_AT_decl_line - .long 621 # DW_AT_import - .byte 20 # Abbrev [20] 0x145:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 65 # DW_AT_decl_line - .long 629 # DW_AT_import - .byte 20 # Abbrev [20] 0x14c:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 66 # DW_AT_decl_line - .long 645 # DW_AT_import - .byte 20 # Abbrev [20] 0x153:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 67 # DW_AT_decl_line - .long 665 # DW_AT_import - .byte 20 # Abbrev [20] 0x15a:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 68 # DW_AT_decl_line - .long 681 # DW_AT_import - .byte 20 # Abbrev [20] 0x161:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 70 # DW_AT_decl_line - .long 701 # DW_AT_import - .byte 20 # Abbrev [20] 0x168:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 71 # DW_AT_decl_line - .long 709 # DW_AT_import - .byte 20 # Abbrev [20] 0x16f:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 72 # DW_AT_decl_line - .long 717 # DW_AT_import - .byte 20 # Abbrev [20] 0x176:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 73 # DW_AT_decl_line - .long 725 # DW_AT_import - .byte 20 # Abbrev [20] 0x17d:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 75 # DW_AT_decl_line - .long 733 # DW_AT_import - .byte 20 # Abbrev [20] 0x184:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 76 # DW_AT_decl_line - .long 749 # DW_AT_import - .byte 20 # Abbrev [20] 0x18b:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 77 # DW_AT_decl_line - .long 765 # DW_AT_import - .byte 20 # Abbrev [20] 0x192:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 78 # DW_AT_decl_line - .long 781 # DW_AT_import - .byte 20 # Abbrev [20] 0x199:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 80 # DW_AT_decl_line - .long 797 # DW_AT_import - .byte 20 # Abbrev [20] 0x1a0:0x7 DW_TAG_imported_declaration - .byte 3 # DW_AT_decl_file - .byte 81 # DW_AT_decl_line - .long 813 # DW_AT_import - .byte 21 # Abbrev [21] 0x1a7:0x9 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 121 # DW_AT_name - .byte 6 # DW_AT_decl_file - .short 280 # DW_AT_decl_line - .byte 0 # End Of Children Mark - .byte 22 # Abbrev [22] 0x1b1:0x8 DW_TAG_typedef - .long 441 # DW_AT_type - .byte 28 # DW_AT_name - .byte 2 # DW_AT_decl_file - .byte 24 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x1b9:0x8 DW_TAG_typedef - .long 449 # DW_AT_type - .byte 27 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 37 # DW_AT_decl_line - .byte 3 # Abbrev [3] 0x1c1:0x4 DW_TAG_base_type - .byte 26 # DW_AT_name - .byte 6 # DW_AT_encoding - .byte 1 # DW_AT_byte_size - .byte 22 # Abbrev [22] 0x1c5:0x8 DW_TAG_typedef - .long 461 # DW_AT_type - .byte 31 # DW_AT_name - .byte 2 # DW_AT_decl_file - .byte 25 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x1cd:0x8 DW_TAG_typedef - .long 469 # DW_AT_type - .byte 30 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 39 # DW_AT_decl_line - .byte 3 # Abbrev [3] 0x1d5:0x4 DW_TAG_base_type - .byte 29 # DW_AT_name - .byte 5 # DW_AT_encoding - .byte 2 # DW_AT_byte_size - .byte 22 # Abbrev [22] 0x1d9:0x8 DW_TAG_typedef - .long 481 # DW_AT_type - .byte 33 # DW_AT_name - .byte 2 # DW_AT_decl_file - .byte 26 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x1e1:0x8 DW_TAG_typedef - .long 54 # DW_AT_type - .byte 32 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x1e9:0x8 DW_TAG_typedef - .long 497 # DW_AT_type - .byte 36 # DW_AT_name - .byte 2 # DW_AT_decl_file - .byte 27 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x1f1:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 35 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 44 # DW_AT_decl_line - .byte 3 # Abbrev [3] 0x1f9:0x4 DW_TAG_base_type - .byte 34 # DW_AT_name - .byte 5 # DW_AT_encoding - .byte 8 # DW_AT_byte_size - .byte 22 # Abbrev [22] 0x1fd:0x8 DW_TAG_typedef - .long 449 # DW_AT_type - .byte 37 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 58 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x205:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 38 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 60 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x20d:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 39 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 61 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x215:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 40 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 62 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x21d:0x8 DW_TAG_typedef - .long 549 # DW_AT_type - .byte 42 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 43 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x225:0x8 DW_TAG_typedef - .long 441 # DW_AT_type - .byte 41 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 52 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x22d:0x8 DW_TAG_typedef - .long 565 # DW_AT_type - .byte 44 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 44 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x235:0x8 DW_TAG_typedef - .long 461 # DW_AT_type - .byte 43 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 54 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x23d:0x8 DW_TAG_typedef - .long 581 # DW_AT_type - .byte 46 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 45 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x245:0x8 DW_TAG_typedef - .long 481 # DW_AT_type - .byte 45 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 56 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x24d:0x8 DW_TAG_typedef - .long 597 # DW_AT_type - .byte 48 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 46 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x255:0x8 DW_TAG_typedef - .long 497 # DW_AT_type - .byte 47 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 58 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x25d:0x8 DW_TAG_typedef - .long 613 # DW_AT_type - .byte 50 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 101 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x265:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 49 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 72 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x26d:0x8 DW_TAG_typedef - .long 505 # DW_AT_type - .byte 51 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 87 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x275:0x8 DW_TAG_typedef - .long 637 # DW_AT_type - .byte 53 # DW_AT_name - .byte 5 # DW_AT_decl_file - .byte 24 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x27d:0x8 DW_TAG_typedef - .long 178 # DW_AT_type - .byte 52 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 38 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x285:0x8 DW_TAG_typedef - .long 653 # DW_AT_type - .byte 56 # DW_AT_name - .byte 5 # DW_AT_decl_file - .byte 25 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x28d:0x8 DW_TAG_typedef - .long 661 # DW_AT_type - .byte 55 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 40 # DW_AT_decl_line - .byte 3 # Abbrev [3] 0x295:0x4 DW_TAG_base_type - .byte 54 # DW_AT_name - .byte 7 # DW_AT_encoding - .byte 2 # DW_AT_byte_size - .byte 22 # Abbrev [22] 0x299:0x8 DW_TAG_typedef - .long 673 # DW_AT_type - .byte 58 # DW_AT_name - .byte 5 # DW_AT_decl_file - .byte 26 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2a1:0x8 DW_TAG_typedef - .long 75 # DW_AT_type - .byte 57 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 42 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2a9:0x8 DW_TAG_typedef - .long 689 # DW_AT_type - .byte 61 # DW_AT_name - .byte 5 # DW_AT_decl_file - .byte 27 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2b1:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 60 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 45 # DW_AT_decl_line - .byte 3 # Abbrev [3] 0x2b9:0x4 DW_TAG_base_type - .byte 59 # DW_AT_name - .byte 7 # DW_AT_encoding - .byte 8 # DW_AT_byte_size - .byte 22 # Abbrev [22] 0x2bd:0x8 DW_TAG_typedef - .long 178 # DW_AT_type - .byte 62 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 71 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2c5:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 63 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 73 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2cd:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 64 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 74 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2d5:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 65 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 75 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2dd:0x8 DW_TAG_typedef - .long 741 # DW_AT_type - .byte 67 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 49 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2e5:0x8 DW_TAG_typedef - .long 637 # DW_AT_type - .byte 66 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 53 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2ed:0x8 DW_TAG_typedef - .long 757 # DW_AT_type - .byte 69 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 50 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2f5:0x8 DW_TAG_typedef - .long 653 # DW_AT_type - .byte 68 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 55 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x2fd:0x8 DW_TAG_typedef - .long 773 # DW_AT_type - .byte 71 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 51 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x305:0x8 DW_TAG_typedef - .long 673 # DW_AT_type - .byte 70 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 57 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x30d:0x8 DW_TAG_typedef - .long 789 # DW_AT_type - .byte 73 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 52 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x315:0x8 DW_TAG_typedef - .long 689 # DW_AT_type - .byte 72 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 59 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x31d:0x8 DW_TAG_typedef - .long 805 # DW_AT_type - .byte 75 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 102 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x325:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 74 # DW_AT_name - .byte 1 # DW_AT_decl_file - .byte 73 # DW_AT_decl_line - .byte 22 # Abbrev [22] 0x32d:0x8 DW_TAG_typedef - .long 697 # DW_AT_type - .byte 76 # DW_AT_name - .byte 4 # DW_AT_decl_file - .byte 90 # DW_AT_decl_line - .byte 23 # Abbrev [23] 0x335:0x17 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0xe2:0x17 DW_TAG_subprogram .byte 1 # DW_AT_low_pc .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 134 # DW_AT_linkage_name - .byte 135 # DW_AT_name + .byte 120 # DW_AT_linkage_name + .byte 121 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 142 # DW_AT_decl_line + .byte 144 # DW_AT_decl_line # DW_AT_external - .byte 24 # Abbrev [24] 0x341:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xee:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 .byte 0 # DW_AT_decl_file - .byte 142 # DW_AT_decl_line - .long 7195 # DW_AT_type + .byte 144 # DW_AT_decl_line + .long 7298 # DW_AT_type .byte 0 # End Of Children Mark - .byte 25 # Abbrev [25] 0x34c:0x8a DW_TAG_subprogram + .byte 22 # Abbrev [22] 0xf9:0x8a DW_TAG_subprogram .byte 2 # DW_AT_low_pc .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 136 # DW_AT_name + .byte 122 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 182 # DW_AT_decl_line + .byte 190 # DW_AT_decl_line .long 54 # DW_AT_type # DW_AT_external - .byte 26 # Abbrev [26] 0x35b:0xb DW_TAG_variable + .byte 23 # Abbrev [23] 0x108:0xb DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .byte 194 # DW_AT_name + .byte 127 + .byte 180 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 183 # DW_AT_decl_line - .long 971 # DW_AT_type - .byte 27 # Abbrev [27] 0x366:0xc DW_TAG_variable + .byte 191 # DW_AT_decl_line + .long 376 # DW_AT_type + .byte 24 # Abbrev [24] 0x113:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 112 - .short 386 # DW_AT_name + .byte 126 + .short 385 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 184 # DW_AT_decl_line - .long 966 # DW_AT_type - .byte 27 # Abbrev [27] 0x372:0xc DW_TAG_variable + .byte 192 # DW_AT_decl_line + .long 371 # DW_AT_type + .byte 24 # Abbrev [24] 0x11f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 104 - .short 387 # DW_AT_name + .byte 125 + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 216 # DW_AT_decl_line - .long 7837 # DW_AT_type - .byte 27 # Abbrev [27] 0x37e:0xc DW_TAG_variable + .byte 224 # DW_AT_decl_line + .long 7963 # DW_AT_type + .byte 24 # Abbrev [24] 0x12b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 96 - .short 390 # DW_AT_name + .byte 124 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 231 # DW_AT_decl_line - .long 7310 # DW_AT_type - .byte 28 # Abbrev [28] 0x38a:0xd DW_TAG_variable + .byte 239 # DW_AT_decl_line + .long 7413 # DW_AT_type + .byte 25 # Abbrev [25] 0x137:0xd DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 88 - .short 391 # DW_AT_name + .byte 123 + .short 390 # DW_AT_name .byte 0 # DW_AT_decl_file - .short 256 # DW_AT_decl_line - .long 3851 # DW_AT_type - .byte 28 # Abbrev [28] 0x397:0xd DW_TAG_variable + .short 264 # DW_AT_decl_line + .long 3243 # DW_AT_type + .byte 25 # Abbrev [25] 0x144:0xd DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 80 - .short 392 # DW_AT_name + .byte 122 + .short 391 # DW_AT_name .byte 0 # DW_AT_decl_file - .short 291 # DW_AT_decl_line - .long 7853 # DW_AT_type - .byte 28 # Abbrev [28] 0x3a4:0xd DW_TAG_variable + .short 299 # DW_AT_decl_line + .long 7979 # DW_AT_type + .byte 25 # Abbrev [25] 0x151:0xd DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 72 - .short 394 # DW_AT_name + .byte 121 + .short 393 # DW_AT_name .byte 0 # DW_AT_decl_file - .short 300 # DW_AT_decl_line + .short 308 # DW_AT_decl_line .long 206 # DW_AT_type - .byte 28 # Abbrev [28] 0x3b1:0xd DW_TAG_variable + .byte 25 # Abbrev [25] 0x15e:0xd DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 64 - .short 395 # DW_AT_name + .byte 120 + .short 394 # DW_AT_name .byte 0 # DW_AT_decl_file - .short 321 # DW_AT_decl_line - .long 7862 # DW_AT_type - .byte 29 # Abbrev [29] 0x3be:0x8 DW_TAG_imported_module + .short 329 # DW_AT_decl_line + .long 7988 # DW_AT_type + .byte 26 # Abbrev [26] 0x16b:0x8 DW_TAG_imported_module .byte 0 # DW_AT_decl_file - .short 288 # DW_AT_decl_line + .short 296 # DW_AT_decl_line .long 79 # DW_AT_import - .byte 30 # Abbrev [30] 0x3c6:0x5 DW_TAG_class_type + .byte 27 # Abbrev [27] 0x173:0x5 DW_TAG_class_type .byte 5 # DW_AT_calling_convention .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 184 # DW_AT_decl_line - .byte 31 # Abbrev [31] 0x3cb:0x5 DW_TAG_structure_type + .byte 192 # DW_AT_decl_line + .byte 28 # Abbrev [28] 0x178:0x5 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 183 # DW_AT_decl_line - .byte 32 # Abbrev [32] 0x3d0:0x3 DW_TAG_structure_type - .short 295 # DW_AT_name + .byte 191 # DW_AT_decl_line + .byte 29 # Abbrev [29] 0x17d:0x3 DW_TAG_structure_type + .short 281 # DW_AT_name # DW_AT_declaration - .byte 7 # Abbrev [7] 0x3d3:0x2 DW_TAG_structure_type - .byte 133 # DW_AT_name + .byte 7 # Abbrev [7] 0x180:0x2 DW_TAG_structure_type + .byte 85 # DW_AT_name # DW_AT_declaration .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x3d6:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x183:0x2d DW_TAG_subprogram .byte 3 # DW_AT_low_pc .long .Lfunc_end2-.Lfunc_begin2 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 137 # DW_AT_linkage_name - .byte 138 # DW_AT_name + .byte 123 # DW_AT_linkage_name + .byte 124 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x3e2:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x18f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7210 # DW_AT_type - .byte 27 # Abbrev [27] 0x3ee:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 7313 # DW_AT_type + .byte 24 # Abbrev [24] 0x19b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 7903 # DW_AT_type - .byte 33 # Abbrev [33] 0x3fa:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x3fc:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8029 # DW_AT_type + .byte 30 # Abbrev [30] 0x1a7:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1a9:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x403:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x1b0:0x2d DW_TAG_subprogram .byte 4 # DW_AT_low_pc .long .Lfunc_end3-.Lfunc_begin3 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 139 # DW_AT_linkage_name - .byte 140 # DW_AT_name + .byte 125 # DW_AT_linkage_name + .byte 126 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x40f:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1bc:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 4516 # DW_AT_type - .byte 27 # Abbrev [27] 0x41b:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 3908 # DW_AT_type + .byte 24 # Abbrev [24] 0x1c8:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 7920 # DW_AT_type - .byte 33 # Abbrev [33] 0x427:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x429:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8046 # DW_AT_type + .byte 30 # Abbrev [30] 0x1d4:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1d6:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x430:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x1dd:0x2d DW_TAG_subprogram .byte 5 # DW_AT_low_pc .long .Lfunc_end4-.Lfunc_begin4 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 141 # DW_AT_linkage_name - .byte 142 # DW_AT_name + .byte 127 # DW_AT_linkage_name + .byte 128 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x43c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1e9:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7937 # DW_AT_type - .byte 27 # Abbrev [27] 0x448:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8063 # DW_AT_type + .byte 24 # Abbrev [24] 0x1f5:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 7953 # DW_AT_type - .byte 33 # Abbrev [33] 0x454:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x456:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8079 # DW_AT_type + .byte 30 # Abbrev [30] 0x201:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x203:0x5 DW_TAG_template_type_parameter .long 202 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x45d:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x20a:0x2d DW_TAG_subprogram .byte 6 # DW_AT_low_pc .long .Lfunc_end5-.Lfunc_begin5 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 144 # DW_AT_linkage_name - .byte 145 # DW_AT_name + .byte 130 # DW_AT_linkage_name + .byte 131 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x469:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x216:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7970 # DW_AT_type - .byte 27 # Abbrev [27] 0x475:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8096 # DW_AT_type + .byte 24 # Abbrev [24] 0x222:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 7986 # DW_AT_type - .byte 33 # Abbrev [33] 0x481:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x483:0x5 DW_TAG_template_type_parameter - .long 7191 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8112 # DW_AT_type + .byte 30 # Abbrev [30] 0x22e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x230:0x5 DW_TAG_template_type_parameter + .long 7294 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x48a:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x237:0x2d DW_TAG_subprogram .byte 7 # DW_AT_low_pc .long .Lfunc_end6-.Lfunc_begin6 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 146 # DW_AT_linkage_name - .byte 147 # DW_AT_name + .byte 132 # DW_AT_linkage_name + .byte 133 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x496:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x243:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8003 # DW_AT_type - .byte 27 # Abbrev [27] 0x4a2:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8129 # DW_AT_type + .byte 24 # Abbrev [24] 0x24f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8019 # DW_AT_type - .byte 33 # Abbrev [33] 0x4ae:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x4b0:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8145 # DW_AT_type + .byte 30 # Abbrev [30] 0x25b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25d:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x4b7:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x264:0x2d DW_TAG_subprogram .byte 8 # DW_AT_low_pc .long .Lfunc_end7-.Lfunc_begin7 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 148 # DW_AT_linkage_name - .byte 149 # DW_AT_name + .byte 134 # DW_AT_linkage_name + .byte 135 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x4c3:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x270:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8036 # DW_AT_type - .byte 27 # Abbrev [27] 0x4cf:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8162 # DW_AT_type + .byte 24 # Abbrev [24] 0x27c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8052 # DW_AT_type - .byte 33 # Abbrev [33] 0x4db:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x4dd:0x5 DW_TAG_template_type_parameter - .long 469 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8178 # DW_AT_type + .byte 30 # Abbrev [30] 0x288:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28a:0x5 DW_TAG_template_type_parameter + .long 7052 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x4e4:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x291:0x2d DW_TAG_subprogram .byte 9 # DW_AT_low_pc .long .Lfunc_end8-.Lfunc_begin8 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 150 # DW_AT_linkage_name - .byte 151 # DW_AT_name + .byte 136 # DW_AT_linkage_name + .byte 137 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x4f0:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x29d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8069 # DW_AT_type - .byte 27 # Abbrev [27] 0x4fc:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8195 # DW_AT_type + .byte 24 # Abbrev [24] 0x2a9:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8085 # DW_AT_type - .byte 33 # Abbrev [33] 0x508:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x50a:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8211 # DW_AT_type + .byte 30 # Abbrev [30] 0x2b5:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2b7:0x5 DW_TAG_template_type_parameter .long 75 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x511:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x2be:0x2d DW_TAG_subprogram .byte 10 # DW_AT_low_pc .long .Lfunc_end9-.Lfunc_begin9 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 153 # DW_AT_linkage_name - .byte 154 # DW_AT_name + .byte 139 # DW_AT_linkage_name + .byte 140 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x51d:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x2ca:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8102 # DW_AT_type - .byte 27 # Abbrev [27] 0x529:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8228 # DW_AT_type + .byte 24 # Abbrev [24] 0x2d6:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8118 # DW_AT_type - .byte 33 # Abbrev [33] 0x535:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x537:0x5 DW_TAG_template_type_parameter - .long 7195 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8244 # DW_AT_type + .byte 30 # Abbrev [30] 0x2e2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2e4:0x5 DW_TAG_template_type_parameter + .long 7298 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x53e:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x2eb:0x2d DW_TAG_subprogram .byte 11 # DW_AT_low_pc .long .Lfunc_end10-.Lfunc_begin10 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 156 # DW_AT_linkage_name - .byte 157 # DW_AT_name + .byte 142 # DW_AT_linkage_name + .byte 143 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x54a:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x2f7:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8135 # DW_AT_type - .byte 27 # Abbrev [27] 0x556:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8261 # DW_AT_type + .byte 24 # Abbrev [24] 0x303:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8151 # DW_AT_type - .byte 33 # Abbrev [33] 0x562:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x564:0x5 DW_TAG_template_type_parameter - .long 7199 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8277 # DW_AT_type + .byte 30 # Abbrev [30] 0x30f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x311:0x5 DW_TAG_template_type_parameter + .long 7302 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x56b:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x318:0x2d DW_TAG_subprogram .byte 12 # DW_AT_low_pc .long .Lfunc_end11-.Lfunc_begin11 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 159 # DW_AT_linkage_name - .byte 160 # DW_AT_name + .byte 145 # DW_AT_linkage_name + .byte 146 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x577:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x324:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8168 # DW_AT_type - .byte 27 # Abbrev [27] 0x583:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8294 # DW_AT_type + .byte 24 # Abbrev [24] 0x330:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8184 # DW_AT_type - .byte 33 # Abbrev [33] 0x58f:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x591:0x5 DW_TAG_template_type_parameter - .long 7203 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8310 # DW_AT_type + .byte 30 # Abbrev [30] 0x33c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x33e:0x5 DW_TAG_template_type_parameter + .long 7306 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x598:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x345:0x2d DW_TAG_subprogram .byte 13 # DW_AT_low_pc .long .Lfunc_end12-.Lfunc_begin12 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 161 # DW_AT_linkage_name - .byte 162 # DW_AT_name + .byte 147 # DW_AT_linkage_name + .byte 148 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x5a4:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x351:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8201 # DW_AT_type - .byte 27 # Abbrev [27] 0x5b0:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8327 # DW_AT_type + .byte 24 # Abbrev [24] 0x35d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8217 # DW_AT_type - .byte 33 # Abbrev [33] 0x5bc:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x5be:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8343 # DW_AT_type + .byte 30 # Abbrev [30] 0x369:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x36b:0x5 DW_TAG_template_type_parameter .long 170 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x5c5:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x372:0x2d DW_TAG_subprogram .byte 14 # DW_AT_low_pc .long .Lfunc_end13-.Lfunc_begin13 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 163 # DW_AT_linkage_name - .byte 164 # DW_AT_name + .byte 149 # DW_AT_linkage_name + .byte 150 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x5d1:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x37e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8234 # DW_AT_type - .byte 27 # Abbrev [27] 0x5dd:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8360 # DW_AT_type + .byte 24 # Abbrev [24] 0x38a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8250 # DW_AT_type - .byte 33 # Abbrev [33] 0x5e9:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x5eb:0x5 DW_TAG_template_type_parameter - .long 7205 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8376 # DW_AT_type + .byte 30 # Abbrev [30] 0x396:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x398:0x5 DW_TAG_template_type_parameter + .long 7308 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x5f2:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x39f:0x2d DW_TAG_subprogram .byte 15 # DW_AT_low_pc .long .Lfunc_end14-.Lfunc_begin14 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 166 # DW_AT_linkage_name - .byte 167 # DW_AT_name + .byte 152 # DW_AT_linkage_name + .byte 153 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x5fe:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x3ab:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8267 # DW_AT_type - .byte 27 # Abbrev [27] 0x60a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8393 # DW_AT_type + .byte 24 # Abbrev [24] 0x3b7:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8283 # DW_AT_type - .byte 33 # Abbrev [33] 0x616:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x618:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8409 # DW_AT_type + .byte 30 # Abbrev [30] 0x3c3:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x3c5:0x5 DW_TAG_template_type_parameter .long 174 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x61f:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x3cc:0x2d DW_TAG_subprogram .byte 16 # DW_AT_low_pc .long .Lfunc_end15-.Lfunc_begin15 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 169 # DW_AT_linkage_name - .byte 170 # DW_AT_name + .byte 155 # DW_AT_linkage_name + .byte 156 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x62b:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x3d8:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8300 # DW_AT_type - .byte 27 # Abbrev [27] 0x637:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8426 # DW_AT_type + .byte 24 # Abbrev [24] 0x3e4:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8316 # DW_AT_type - .byte 33 # Abbrev [33] 0x643:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x645:0x5 DW_TAG_template_type_parameter - .long 7210 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8442 # DW_AT_type + .byte 30 # Abbrev [30] 0x3f0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x3f2:0x5 DW_TAG_template_type_parameter + .long 7313 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x64c:0x32 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x3f9:0x32 DW_TAG_subprogram .byte 17 # DW_AT_low_pc .long .Lfunc_end16-.Lfunc_begin16 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 171 # DW_AT_linkage_name - .byte 172 # DW_AT_name + .byte 157 # DW_AT_linkage_name + .byte 158 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x658:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x405:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8333 # DW_AT_type - .byte 27 # Abbrev [27] 0x664:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8459 # DW_AT_type + .byte 24 # Abbrev [24] 0x411:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8354 # DW_AT_type - .byte 33 # Abbrev [33] 0x670:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x672:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8480 # DW_AT_type + .byte 30 # Abbrev [30] 0x41d:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x41f:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x677:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 31 # Abbrev [31] 0x424:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x67e:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x42b:0x2d DW_TAG_subprogram .byte 18 # DW_AT_low_pc .long .Lfunc_end17-.Lfunc_begin17 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 173 # DW_AT_linkage_name - .byte 174 # DW_AT_name + .byte 159 # DW_AT_linkage_name + .byte 160 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x68a:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x437:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7422 # DW_AT_type - .byte 27 # Abbrev [27] 0x696:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 7524 # DW_AT_type + .byte 24 # Abbrev [24] 0x443:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8376 # DW_AT_type - .byte 33 # Abbrev [33] 0x6a2:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x6a4:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8502 # DW_AT_type + .byte 30 # Abbrev [30] 0x44f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x451:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x6ab:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x458:0x2d DW_TAG_subprogram .byte 19 # DW_AT_low_pc .long .Lfunc_end18-.Lfunc_begin18 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 175 # DW_AT_linkage_name - .byte 176 # DW_AT_name + .byte 161 # DW_AT_linkage_name + .byte 162 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x6b7:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x464:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8393 # DW_AT_type - .byte 27 # Abbrev [27] 0x6c3:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8519 # DW_AT_type + .byte 24 # Abbrev [24] 0x470:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8409 # DW_AT_type - .byte 33 # Abbrev [33] 0x6cf:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x6d1:0x5 DW_TAG_template_type_parameter - .long 7230 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8535 # DW_AT_type + .byte 30 # Abbrev [30] 0x47c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x47e:0x5 DW_TAG_template_type_parameter + .long 7333 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x6d8:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x485:0x2d DW_TAG_subprogram .byte 20 # DW_AT_low_pc .long .Lfunc_end19-.Lfunc_begin19 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 177 # DW_AT_linkage_name - .byte 178 # DW_AT_name + .byte 163 # DW_AT_linkage_name + .byte 164 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x6e4:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x491:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8426 # DW_AT_type - .byte 27 # Abbrev [27] 0x6f0:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8552 # DW_AT_type + .byte 24 # Abbrev [24] 0x49d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8442 # DW_AT_type - .byte 33 # Abbrev [33] 0x6fc:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x6fe:0x5 DW_TAG_template_type_parameter - .long 7235 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8568 # DW_AT_type + .byte 30 # Abbrev [30] 0x4a9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x4ab:0x5 DW_TAG_template_type_parameter + .long 7338 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x705:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x4b2:0x2d DW_TAG_subprogram .byte 21 # DW_AT_low_pc .long .Lfunc_end20-.Lfunc_begin20 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 179 # DW_AT_linkage_name - .byte 180 # DW_AT_name + .byte 165 # DW_AT_linkage_name + .byte 166 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x711:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x4be:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8459 # DW_AT_type - .byte 27 # Abbrev [27] 0x71d:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8585 # DW_AT_type + .byte 24 # Abbrev [24] 0x4ca:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8475 # DW_AT_type - .byte 33 # Abbrev [33] 0x729:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x72b:0x5 DW_TAG_template_type_parameter - .long 7240 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8601 # DW_AT_type + .byte 30 # Abbrev [30] 0x4d6:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x4d8:0x5 DW_TAG_template_type_parameter + .long 7343 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x732:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x4df:0x2d DW_TAG_subprogram .byte 22 # DW_AT_low_pc .long .Lfunc_end21-.Lfunc_begin21 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 182 # DW_AT_linkage_name - .byte 183 # DW_AT_name + .byte 168 # DW_AT_linkage_name + .byte 169 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x73e:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x4eb:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8492 # DW_AT_type - .byte 27 # Abbrev [27] 0x74a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8618 # DW_AT_type + .byte 24 # Abbrev [24] 0x4f7:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8508 # DW_AT_type - .byte 33 # Abbrev [33] 0x756:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x758:0x5 DW_TAG_template_type_parameter - .long 7245 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8634 # DW_AT_type + .byte 30 # Abbrev [30] 0x503:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x505:0x5 DW_TAG_template_type_parameter + .long 7348 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x75f:0x29 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x50c:0x29 DW_TAG_subprogram .byte 23 # DW_AT_low_pc .long .Lfunc_end22-.Lfunc_begin22 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 184 # DW_AT_linkage_name - .byte 185 # DW_AT_name + .byte 170 # DW_AT_linkage_name + .byte 171 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x76b:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x518:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8525 # DW_AT_type - .byte 27 # Abbrev [27] 0x777:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8651 # DW_AT_type + .byte 24 # Abbrev [24] 0x524:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8537 # DW_AT_type - .byte 33 # Abbrev [33] 0x783:0x4 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 35 # Abbrev [35] 0x785:0x1 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8663 # DW_AT_type + .byte 30 # Abbrev [30] 0x530:0x4 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 32 # Abbrev [32] 0x532:0x1 DW_TAG_template_type_parameter .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x788:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x535:0x2d DW_TAG_subprogram .byte 24 # DW_AT_low_pc .long .Lfunc_end23-.Lfunc_begin23 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 188 # DW_AT_linkage_name - .byte 189 # DW_AT_name + .byte 174 # DW_AT_linkage_name + .byte 175 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x794:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x541:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8550 # DW_AT_type - .byte 27 # Abbrev [27] 0x7a0:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8676 # DW_AT_type + .byte 24 # Abbrev [24] 0x54d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8566 # DW_AT_type - .byte 33 # Abbrev [33] 0x7ac:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x7ae:0x5 DW_TAG_template_type_parameter - .long 7267 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8692 # DW_AT_type + .byte 30 # Abbrev [30] 0x559:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x55b:0x5 DW_TAG_template_type_parameter + .long 7370 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x7b5:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x562:0x2d DW_TAG_subprogram .byte 25 # DW_AT_low_pc .long .Lfunc_end24-.Lfunc_begin24 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 190 # DW_AT_linkage_name - .byte 191 # DW_AT_name + .byte 176 # DW_AT_linkage_name + .byte 177 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x7c1:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x56e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8583 # DW_AT_type - .byte 27 # Abbrev [27] 0x7cd:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8709 # DW_AT_type + .byte 24 # Abbrev [24] 0x57a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8599 # DW_AT_type - .byte 33 # Abbrev [33] 0x7d9:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x7db:0x5 DW_TAG_template_type_parameter - .long 697 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8725 # DW_AT_type + .byte 30 # Abbrev [30] 0x586:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x588:0x5 DW_TAG_template_type_parameter + .long 4793 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x7e2:0x1b DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x58f:0x1b DW_TAG_subprogram .byte 26 # DW_AT_low_pc .long .Lfunc_end25-.Lfunc_begin25 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 192 # DW_AT_linkage_name - .byte 193 # DW_AT_name + .byte 178 # DW_AT_linkage_name + .byte 179 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 38 # DW_AT_decl_line + .byte 40 # DW_AT_decl_line # DW_AT_external - .byte 36 # Abbrev [36] 0x7ee:0x7 DW_TAG_template_value_parameter + .byte 33 # Abbrev [33] 0x59b:0x7 DW_TAG_template_value_parameter .long 202 # DW_AT_type .byte 22 # DW_AT_name .byte 1 # DW_AT_const_value - .byte 37 # Abbrev [37] 0x7f5:0x7 DW_TAG_template_value_parameter + .byte 34 # Abbrev [34] 0x5a2:0x7 DW_TAG_template_value_parameter .long 54 # DW_AT_type .byte 3 # DW_AT_name .byte 3 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x7fd:0x22 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x5aa:0x22 DW_TAG_subprogram .byte 27 # DW_AT_low_pc .long .Lfunc_end26-.Lfunc_begin26 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 195 # DW_AT_linkage_name - .byte 196 # DW_AT_name + .byte 181 # DW_AT_linkage_name + .byte 182 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x809:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x5b6:0x6 DW_TAG_template_type_parameter .long 81 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x80f:0xf DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x811:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x5bc:0xf DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x5be:0x6 DW_TAG_template_value_parameter .long 81 # DW_AT_type .byte 1 # DW_AT_const_value - .byte 38 # Abbrev [38] 0x817:0x6 DW_TAG_template_value_parameter + .byte 35 # Abbrev [35] 0x5c4:0x6 DW_TAG_template_value_parameter .long 81 # DW_AT_type .byte 2 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x81f:0x22 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x5cc:0x22 DW_TAG_subprogram .byte 28 # DW_AT_low_pc .long .Lfunc_end27-.Lfunc_begin27 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 197 # DW_AT_linkage_name - .byte 198 # DW_AT_name + .byte 183 # DW_AT_linkage_name + .byte 184 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x82b:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x5d8:0x6 DW_TAG_template_type_parameter .long 100 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x831:0xf DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 39 # Abbrev [39] 0x833:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x5de:0xf DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x5e0:0x6 DW_TAG_template_value_parameter .long 100 # DW_AT_type .byte 1 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x839:0x6 DW_TAG_template_value_parameter + .byte 35 # Abbrev [35] 0x5e6:0x6 DW_TAG_template_value_parameter .long 100 # DW_AT_type .byte 2 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x841:0x1d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x5ee:0x1d DW_TAG_subprogram .byte 29 # DW_AT_low_pc .long .Lfunc_end28-.Lfunc_begin28 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 199 # DW_AT_linkage_name - .byte 200 # DW_AT_name + .byte 185 # DW_AT_linkage_name + .byte 186 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x84d:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x5fa:0x6 DW_TAG_template_type_parameter .long 119 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x853:0xa DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x855:0x7 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x600:0xa DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x602:0x7 DW_TAG_template_value_parameter .long 119 # DW_AT_type .ascii "\377\001" # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 40 # Abbrev [40] 0x85e:0x22 DW_TAG_subprogram + .byte 37 # Abbrev [37] 0x60b:0x22 DW_TAG_subprogram .byte 30 # DW_AT_low_pc .long .Lfunc_end29-.Lfunc_begin29 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 201 # DW_AT_linkage_name - .byte 202 # DW_AT_name + .byte 187 # DW_AT_linkage_name + .byte 188 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line - .byte 15 # Abbrev [15] 0x86a:0x6 DW_TAG_template_type_parameter + .byte 43 # DW_AT_decl_line + .byte 15 # Abbrev [15] 0x617:0x6 DW_TAG_template_type_parameter .long 133 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x870:0xf DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x872:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x61d:0xf DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x61f:0x6 DW_TAG_template_value_parameter .long 133 # DW_AT_type .byte 1 # DW_AT_const_value - .byte 38 # Abbrev [38] 0x878:0x6 DW_TAG_template_value_parameter + .byte 35 # Abbrev [35] 0x625:0x6 DW_TAG_template_value_parameter .long 133 # DW_AT_type .byte 2 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 40 # Abbrev [40] 0x880:0x1c DW_TAG_subprogram + .byte 37 # Abbrev [37] 0x62d:0x1c DW_TAG_subprogram .byte 31 # DW_AT_low_pc .long .Lfunc_end30-.Lfunc_begin30 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 203 # DW_AT_linkage_name - .byte 204 # DW_AT_name + .byte 189 # DW_AT_linkage_name + .byte 190 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line - .byte 15 # Abbrev [15] 0x88c:0x6 DW_TAG_template_type_parameter + .byte 43 # DW_AT_decl_line + .byte 15 # Abbrev [15] 0x639:0x6 DW_TAG_template_type_parameter .long 59 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x892:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x894:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x63f:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x641:0x6 DW_TAG_template_value_parameter .long 59 # DW_AT_type .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x89c:0x1f DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x649:0x1f DW_TAG_subprogram .byte 32 # DW_AT_low_pc .long .Lfunc_end31-.Lfunc_begin31 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 205 # DW_AT_linkage_name - .byte 206 # DW_AT_name + .byte 191 # DW_AT_linkage_name + .byte 192 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x8a8:0x6 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type + .byte 15 # Abbrev [15] 0x655:0x6 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x8ae:0xc DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 41 # Abbrev [41] 0x8b0:0x9 DW_TAG_template_value_parameter - .long 7225 # DW_AT_type + .byte 30 # Abbrev [30] 0x65b:0xc DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 38 # Abbrev [38] 0x65d:0x9 DW_TAG_template_value_parameter + .long 7328 # DW_AT_type .byte 3 # DW_AT_location .byte 161 .byte 0 .byte 159 .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x8bb:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x668:0x1c DW_TAG_subprogram .byte 33 # DW_AT_low_pc .long .Lfunc_end32-.Lfunc_begin32 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 207 # DW_AT_linkage_name - .byte 208 # DW_AT_name + .byte 193 # DW_AT_linkage_name + .byte 194 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x8c7:0x6 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type + .byte 15 # Abbrev [15] 0x674:0x6 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x8cd:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x8cf:0x6 DW_TAG_template_value_parameter - .long 7225 # DW_AT_type + .byte 30 # Abbrev [30] 0x67a:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x67c:0x6 DW_TAG_template_value_parameter + .long 7328 # DW_AT_type .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x8d7:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x684:0x1c DW_TAG_subprogram .byte 34 # DW_AT_low_pc .long .Lfunc_end33-.Lfunc_begin33 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 209 # DW_AT_linkage_name - .byte 210 # DW_AT_name + .byte 195 # DW_AT_linkage_name + .byte 196 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x8e3:0x6 DW_TAG_template_type_parameter - .long 697 # DW_AT_type + .byte 15 # Abbrev [15] 0x690:0x6 DW_TAG_template_type_parameter + .long 4793 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x8e9:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x8eb:0x6 DW_TAG_template_value_parameter - .long 697 # DW_AT_type + .byte 30 # Abbrev [30] 0x696:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x698:0x6 DW_TAG_template_value_parameter + .long 4793 # DW_AT_type .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x8f3:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x6a0:0x1c DW_TAG_subprogram .byte 35 # DW_AT_low_pc .long .Lfunc_end34-.Lfunc_begin34 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 211 # DW_AT_linkage_name - .byte 212 # DW_AT_name + .byte 197 # DW_AT_linkage_name + .byte 198 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x8ff:0x6 DW_TAG_template_type_parameter - .long 7195 # DW_AT_type + .byte 15 # Abbrev [15] 0x6ac:0x6 DW_TAG_template_type_parameter + .long 7298 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x905:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x907:0x6 DW_TAG_template_value_parameter - .long 7195 # DW_AT_type + .byte 30 # Abbrev [30] 0x6b2:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x6b4:0x6 DW_TAG_template_value_parameter + .long 7298 # DW_AT_type .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x90f:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x6bc:0x1c DW_TAG_subprogram .byte 36 # DW_AT_low_pc .long .Lfunc_end35-.Lfunc_begin35 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 213 # DW_AT_linkage_name - .byte 214 # DW_AT_name + .byte 199 # DW_AT_linkage_name + .byte 200 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x91b:0x6 DW_TAG_template_type_parameter - .long 505 # DW_AT_type + .byte 15 # Abbrev [15] 0x6c8:0x6 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x921:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 39 # Abbrev [39] 0x923:0x6 DW_TAG_template_value_parameter - .long 505 # DW_AT_type + .byte 30 # Abbrev [30] 0x6ce:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x6d0:0x6 DW_TAG_template_value_parameter + .long 7072 # DW_AT_type .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x92b:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x6d8:0x1c DW_TAG_subprogram .byte 37 # DW_AT_low_pc .long .Lfunc_end36-.Lfunc_begin36 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 215 # DW_AT_linkage_name - .byte 216 # DW_AT_name + .byte 201 # DW_AT_linkage_name + .byte 202 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x937:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x6e4:0x6 DW_TAG_template_type_parameter .long 75 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x93d:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x93f:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x6ea:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x6ec:0x6 DW_TAG_template_value_parameter .long 75 # DW_AT_type .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x947:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x6f4:0x1c DW_TAG_subprogram .byte 38 # DW_AT_low_pc .long .Lfunc_end37-.Lfunc_begin37 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 217 # DW_AT_linkage_name - .byte 218 # DW_AT_name + .byte 203 # DW_AT_linkage_name + .byte 204 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x953:0x6 DW_TAG_template_type_parameter - .long 469 # DW_AT_type + .byte 15 # Abbrev [15] 0x700:0x6 DW_TAG_template_type_parameter + .long 7052 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x959:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 39 # Abbrev [39] 0x95b:0x6 DW_TAG_template_value_parameter - .long 469 # DW_AT_type + .byte 30 # Abbrev [30] 0x706:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x708:0x6 DW_TAG_template_value_parameter + .long 7052 # DW_AT_type .byte 1 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x963:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x710:0x1c DW_TAG_subprogram .byte 39 # DW_AT_low_pc .long .Lfunc_end38-.Lfunc_begin38 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 219 # DW_AT_linkage_name - .byte 220 # DW_AT_name + .byte 205 # DW_AT_linkage_name + .byte 206 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x96f:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x71c:0x6 DW_TAG_template_type_parameter .long 178 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x975:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x977:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x722:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x724:0x6 DW_TAG_template_value_parameter .long 178 # DW_AT_type .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x97f:0x1c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x72c:0x1c DW_TAG_subprogram .byte 40 # DW_AT_low_pc .long .Lfunc_end39-.Lfunc_begin39 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 221 # DW_AT_linkage_name - .byte 222 # DW_AT_name + .byte 207 # DW_AT_linkage_name + .byte 208 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x98b:0x6 DW_TAG_template_type_parameter - .long 449 # DW_AT_type + .byte 15 # Abbrev [15] 0x738:0x6 DW_TAG_template_type_parameter + .long 7040 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x991:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 39 # Abbrev [39] 0x993:0x6 DW_TAG_template_value_parameter - .long 449 # DW_AT_type + .byte 30 # Abbrev [30] 0x73e:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x740:0x6 DW_TAG_template_value_parameter + .long 7040 # DW_AT_type .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x99b:0x22 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x748:0x22 DW_TAG_subprogram .byte 41 # DW_AT_low_pc .long .Lfunc_end40-.Lfunc_begin40 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 223 # DW_AT_linkage_name - .byte 224 # DW_AT_name + .byte 209 # DW_AT_linkage_name + .byte 210 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x9a7:0x6 DW_TAG_template_type_parameter - .long 661 # DW_AT_type + .byte 15 # Abbrev [15] 0x754:0x6 DW_TAG_template_type_parameter + .long 7093 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x9ad:0xf DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x9af:0x6 DW_TAG_template_value_parameter - .long 661 # DW_AT_type + .byte 30 # Abbrev [30] 0x75a:0xf DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x75c:0x6 DW_TAG_template_value_parameter + .long 7093 # DW_AT_type .byte 1 # DW_AT_const_value - .byte 38 # Abbrev [38] 0x9b5:0x6 DW_TAG_template_value_parameter - .long 661 # DW_AT_type + .byte 36 # Abbrev [36] 0x762:0x6 DW_TAG_template_value_parameter + .long 7093 # DW_AT_type .byte 2 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0x9bd:0x5a DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x76a:0x5a DW_TAG_subprogram .byte 42 # DW_AT_low_pc .long .Lfunc_end41-.Lfunc_begin41 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 226 # DW_AT_linkage_name - .byte 227 # DW_AT_name + .byte 212 # DW_AT_linkage_name + .byte 213 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x9c9:0x6 DW_TAG_template_type_parameter - .long 7270 # DW_AT_type + .byte 15 # Abbrev [15] 0x776:0x6 DW_TAG_template_type_parameter + .long 7373 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x9cf:0x47 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 39 # Abbrev [39] 0x9d1:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 30 # Abbrev [30] 0x77c:0x47 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 35 # Abbrev [35] 0x77e:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 0 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9d7:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x784:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 1 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9dd:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x78a:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 6 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9e3:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x790:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 7 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9e9:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x796:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 13 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9ef:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x79c:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 14 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9f5:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x7a2:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 31 # DW_AT_const_value - .byte 39 # Abbrev [39] 0x9fb:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x7a8:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 32 # DW_AT_const_value - .byte 39 # Abbrev [39] 0xa01:0x6 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x7ae:0x6 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .byte 33 # DW_AT_const_value - .byte 39 # Abbrev [39] 0xa07:0x7 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x7b4:0x7 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .asciz "\377" # DW_AT_const_value - .byte 39 # Abbrev [39] 0xa0e:0x7 DW_TAG_template_value_parameter - .long 7270 # DW_AT_type + .byte 35 # Abbrev [35] 0x7bb:0x7 DW_TAG_template_value_parameter + .long 7373 # DW_AT_type .ascii "\200\177" # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xa17:0x2c DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x7c4:0x2c DW_TAG_subprogram .byte 43 # DW_AT_low_pc .long .Lfunc_end42-.Lfunc_begin42 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 229 # DW_AT_linkage_name - .byte 230 # DW_AT_name + .byte 215 # DW_AT_linkage_name + .byte 216 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 41 # DW_AT_decl_line + .byte 43 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0xa23:0x6 DW_TAG_template_type_parameter - .long 7274 # DW_AT_type + .byte 15 # Abbrev [15] 0x7d0:0x6 DW_TAG_template_type_parameter + .long 7377 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0xa29:0x19 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 42 # Abbrev [42] 0xa2b:0x16 DW_TAG_template_value_parameter - .long 7274 # DW_AT_type + .byte 30 # Abbrev [30] 0x7d6:0x19 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 39 # Abbrev [39] 0x7d8:0x16 DW_TAG_template_value_parameter + .long 7377 # DW_AT_type .byte 16 # DW_AT_const_value .byte 254 .byte 255 @@ -6511,5288 +6353,5721 @@ i: .byte 0 .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xa43:0x19 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x7f0:0x19 DW_TAG_subprogram .byte 44 # DW_AT_low_pc .long .Lfunc_end43-.Lfunc_begin43 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 231 # DW_AT_linkage_name - .byte 232 # DW_AT_name + .byte 217 # DW_AT_linkage_name + .byte 218 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 44 # DW_AT_decl_line + .byte 46 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0xa4f:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x7fc:0x6 DW_TAG_template_type_parameter .long 75 # DW_AT_type .byte 20 # DW_AT_name - .byte 43 # Abbrev [43] 0xa55:0x6 DW_TAG_template_value_parameter + .byte 36 # Abbrev [36] 0x802:0x6 DW_TAG_template_value_parameter .long 75 # DW_AT_type - # DW_AT_default_value .byte 3 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xa5c:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x809:0x2d DW_TAG_subprogram .byte 45 # DW_AT_low_pc .long .Lfunc_end44-.Lfunc_begin44 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 233 # DW_AT_linkage_name - .byte 234 # DW_AT_name + .byte 219 # DW_AT_linkage_name + .byte 220 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xa68:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x815:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8616 # DW_AT_type - .byte 27 # Abbrev [27] 0xa74:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8742 # DW_AT_type + .byte 24 # Abbrev [24] 0x821:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8632 # DW_AT_type - .byte 33 # Abbrev [33] 0xa80:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xa82:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 8758 # DW_AT_type + .byte 30 # Abbrev [30] 0x82d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x82f:0x5 DW_TAG_template_type_parameter .long 182 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xa89:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x836:0x2d DW_TAG_subprogram .byte 46 # DW_AT_low_pc .long .Lfunc_end45-.Lfunc_begin45 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 236 # DW_AT_linkage_name - .byte 237 # DW_AT_name + .byte 222 # DW_AT_linkage_name + .byte 223 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xa95:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x842:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8649 # DW_AT_type - .byte 27 # Abbrev [27] 0xaa1:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8775 # DW_AT_type + .byte 24 # Abbrev [24] 0x84e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8665 # DW_AT_type - .byte 33 # Abbrev [33] 0xaad:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xaaf:0x5 DW_TAG_template_type_parameter - .long 7278 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8791 # DW_AT_type + .byte 30 # Abbrev [30] 0x85a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x85c:0x5 DW_TAG_template_type_parameter + .long 7381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 40 # Abbrev [40] 0xab6:0x2d DW_TAG_subprogram + .byte 37 # Abbrev [37] 0x863:0x2d DW_TAG_subprogram .byte 47 # DW_AT_low_pc .long .Lfunc_end46-.Lfunc_begin46 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 238 # DW_AT_linkage_name - .byte 239 # DW_AT_name + .byte 224 # DW_AT_linkage_name + .byte 225 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xac2:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x86f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7516 # DW_AT_type - .byte 27 # Abbrev [27] 0xace:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 7618 # DW_AT_type + .byte 24 # Abbrev [24] 0x87b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8682 # DW_AT_type - .byte 33 # Abbrev [33] 0xada:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xadc:0x5 DW_TAG_template_type_parameter - .long 966 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8808 # DW_AT_type + .byte 30 # Abbrev [30] 0x887:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x889:0x5 DW_TAG_template_type_parameter + .long 371 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 40 # Abbrev [40] 0xae3:0x2d DW_TAG_subprogram + .byte 37 # Abbrev [37] 0x890:0x2d DW_TAG_subprogram .byte 48 # DW_AT_low_pc .long .Lfunc_end47-.Lfunc_begin47 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 242 # DW_AT_linkage_name - .byte 243 # DW_AT_name + .byte 228 # DW_AT_linkage_name + .byte 229 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xaef:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x89c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8699 # DW_AT_type - .byte 27 # Abbrev [27] 0xafb:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8825 # DW_AT_type + .byte 24 # Abbrev [24] 0x8a8:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8715 # DW_AT_type - .byte 33 # Abbrev [33] 0xb07:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xb09:0x5 DW_TAG_template_type_parameter - .long 7294 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8841 # DW_AT_type + .byte 30 # Abbrev [30] 0x8b4:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x8b6:0x5 DW_TAG_template_type_parameter + .long 7397 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xb10:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x8bd:0x2d DW_TAG_subprogram .byte 49 # DW_AT_low_pc .long .Lfunc_end48-.Lfunc_begin48 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 244 # DW_AT_linkage_name - .byte 245 # DW_AT_name + .byte 230 # DW_AT_linkage_name + .byte 231 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xb1c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x8c9:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8732 # DW_AT_type - .byte 27 # Abbrev [27] 0xb28:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8858 # DW_AT_type + .byte 24 # Abbrev [24] 0x8d5:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8748 # DW_AT_type - .byte 33 # Abbrev [33] 0xb34:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xb36:0x5 DW_TAG_template_type_parameter - .long 7330 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8874 # DW_AT_type + .byte 30 # Abbrev [30] 0x8e1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x8e3:0x5 DW_TAG_template_type_parameter + .long 7433 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xb3d:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x8ea:0x2d DW_TAG_subprogram .byte 50 # DW_AT_low_pc .long .Lfunc_end49-.Lfunc_begin49 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 246 # DW_AT_linkage_name - .byte 247 # DW_AT_name + .byte 232 # DW_AT_linkage_name + .byte 233 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xb49:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x8f6:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8765 # DW_AT_type - .byte 27 # Abbrev [27] 0xb55:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8891 # DW_AT_type + .byte 24 # Abbrev [24] 0x902:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8781 # DW_AT_type - .byte 33 # Abbrev [33] 0xb61:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xb63:0x5 DW_TAG_template_type_parameter - .long 7341 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8907 # DW_AT_type + .byte 30 # Abbrev [30] 0x90e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x910:0x5 DW_TAG_template_type_parameter + .long 7444 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xb6a:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x917:0x2d DW_TAG_subprogram .byte 51 # DW_AT_low_pc .long .Lfunc_end50-.Lfunc_begin50 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 248 # DW_AT_linkage_name - .byte 249 # DW_AT_name + .byte 234 # DW_AT_linkage_name + .byte 235 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xb76:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x923:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8798 # DW_AT_type - .byte 27 # Abbrev [27] 0xb82:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8924 # DW_AT_type + .byte 24 # Abbrev [24] 0x92f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8814 # DW_AT_type - .byte 33 # Abbrev [33] 0xb8e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xb90:0x5 DW_TAG_template_type_parameter - .long 7344 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8940 # DW_AT_type + .byte 30 # Abbrev [30] 0x93b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x93d:0x5 DW_TAG_template_type_parameter + .long 7447 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xb97:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x944:0x2d DW_TAG_subprogram .byte 52 # DW_AT_low_pc .long .Lfunc_end51-.Lfunc_begin51 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 250 # DW_AT_linkage_name - .byte 251 # DW_AT_name + .byte 236 # DW_AT_linkage_name + .byte 237 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xba3:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x950:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8831 # DW_AT_type - .byte 27 # Abbrev [27] 0xbaf:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8957 # DW_AT_type + .byte 24 # Abbrev [24] 0x95c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8847 # DW_AT_type - .byte 33 # Abbrev [33] 0xbbb:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xbbd:0x5 DW_TAG_template_type_parameter - .long 7352 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 8973 # DW_AT_type + .byte 30 # Abbrev [30] 0x968:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x96a:0x5 DW_TAG_template_type_parameter + .long 7455 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 23 # Abbrev [23] 0xbc4:0x2d DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x971:0x2d DW_TAG_subprogram .byte 53 # DW_AT_low_pc .long .Lfunc_end52-.Lfunc_begin52 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 252 # DW_AT_linkage_name - .byte 253 # DW_AT_name + .byte 238 # DW_AT_linkage_name + .byte 239 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xbd0:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x97d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8864 # DW_AT_type - .byte 27 # Abbrev [27] 0xbdc:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 8990 # DW_AT_type + .byte 24 # Abbrev [24] 0x989:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8880 # DW_AT_type - .byte 33 # Abbrev [33] 0xbe8:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xbea:0x5 DW_TAG_template_type_parameter - .long 7357 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9006 # DW_AT_type + .byte 30 # Abbrev [30] 0x995:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x997:0x5 DW_TAG_template_type_parameter + .long 7460 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 44 # Abbrev [44] 0xbf1:0x2e DW_TAG_subprogram + .byte 37 # Abbrev [37] 0x99e:0x2d DW_TAG_subprogram .byte 54 # DW_AT_low_pc .long .Lfunc_end53-.Lfunc_begin53 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .byte 255 # DW_AT_linkage_name - .short 256 # DW_AT_name + .byte 241 # DW_AT_linkage_name + .byte 242 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xbfe:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x9aa:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8897 # DW_AT_type - .byte 27 # Abbrev [27] 0xc0a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9023 # DW_AT_type + .byte 24 # Abbrev [24] 0x9b6:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8913 # DW_AT_type - .byte 33 # Abbrev [33] 0xc16:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xc18:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 9039 # DW_AT_type + .byte 30 # Abbrev [30] 0x9c2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x9c4:0x5 DW_TAG_template_type_parameter .long 72 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xc1f:0x2f DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x9cb:0x2d DW_TAG_subprogram .byte 55 # DW_AT_low_pc .long .Lfunc_end54-.Lfunc_begin54 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 258 # DW_AT_linkage_name - .short 259 # DW_AT_name + .byte 244 # DW_AT_linkage_name + .byte 245 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xc2d:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x9d7:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8930 # DW_AT_type - .byte 27 # Abbrev [27] 0xc39:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9056 # DW_AT_type + .byte 24 # Abbrev [24] 0x9e3:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8946 # DW_AT_type - .byte 33 # Abbrev [33] 0xc45:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xc47:0x5 DW_TAG_template_type_parameter - .long 7367 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9072 # DW_AT_type + .byte 30 # Abbrev [30] 0x9ef:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x9f1:0x5 DW_TAG_template_type_parameter + .long 7470 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xc4e:0x34 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0x9f8:0x32 DW_TAG_subprogram .byte 56 # DW_AT_low_pc .long .Lfunc_end55-.Lfunc_begin55 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 260 # DW_AT_linkage_name - .short 261 # DW_AT_name + .byte 246 # DW_AT_linkage_name + .byte 247 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xc5c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xa04:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 8963 # DW_AT_type - .byte 27 # Abbrev [27] 0xc68:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9089 # DW_AT_type + .byte 24 # Abbrev [24] 0xa10:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 8984 # DW_AT_type - .byte 33 # Abbrev [33] 0xc74:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xc76:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0xc7b:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9110 # DW_AT_type + .byte 30 # Abbrev [30] 0xa1c:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xa1e:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0xa23:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xc82:0x34 DW_TAG_subprogram + .byte 20 # Abbrev [20] 0xa2a:0x32 DW_TAG_subprogram .byte 57 # DW_AT_low_pc .long .Lfunc_end56-.Lfunc_begin56 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 262 # DW_AT_linkage_name - .short 263 # DW_AT_name + .byte 248 # DW_AT_linkage_name + .byte 249 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xc90:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xa36:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9006 # DW_AT_type - .byte 27 # Abbrev [27] 0xc9c:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9132 # DW_AT_type + .byte 24 # Abbrev [24] 0xa42:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9027 # DW_AT_type - .byte 33 # Abbrev [33] 0xca8:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xcaa:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0xcaf:0x5 DW_TAG_template_type_parameter - .long 7375 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9153 # DW_AT_type + .byte 30 # Abbrev [30] 0xa4e:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xa50:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0xa55:0x5 DW_TAG_template_type_parameter + .long 7477 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xcb6:0x2f DW_TAG_subprogram + .byte 20 # Abbrev [20] 0xa5c:0x2d DW_TAG_subprogram .byte 58 # DW_AT_low_pc .long .Lfunc_end57-.Lfunc_begin57 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 264 # DW_AT_linkage_name - .short 265 # DW_AT_name + .byte 250 # DW_AT_linkage_name + .byte 251 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xcc4:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xa68:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9049 # DW_AT_type - .byte 27 # Abbrev [27] 0xcd0:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9175 # DW_AT_type + .byte 24 # Abbrev [24] 0xa74:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9065 # DW_AT_type - .byte 33 # Abbrev [33] 0xcdc:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xcde:0x5 DW_TAG_template_type_parameter - .long 7380 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9191 # DW_AT_type + .byte 30 # Abbrev [30] 0xa80:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xa82:0x5 DW_TAG_template_type_parameter + .long 7482 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xce5:0x2f DW_TAG_subprogram + .byte 20 # Abbrev [20] 0xa89:0x2d DW_TAG_subprogram .byte 59 # DW_AT_low_pc .long .Lfunc_end58-.Lfunc_begin58 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 266 # DW_AT_linkage_name - .short 267 # DW_AT_name + .byte 252 # DW_AT_linkage_name + .byte 253 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xcf3:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xa95:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9082 # DW_AT_type - .byte 27 # Abbrev [27] 0xcff:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9208 # DW_AT_type + .byte 24 # Abbrev [24] 0xaa1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9098 # DW_AT_type - .byte 33 # Abbrev [33] 0xd0b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xd0d:0x5 DW_TAG_template_type_parameter - .long 7385 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9224 # DW_AT_type + .byte 30 # Abbrev [30] 0xaad:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xaaf:0x5 DW_TAG_template_type_parameter + .long 7487 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xd14:0x2f DW_TAG_subprogram + .byte 20 # Abbrev [20] 0xab6:0x2d DW_TAG_subprogram .byte 60 # DW_AT_low_pc .long .Lfunc_end59-.Lfunc_begin59 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 268 # DW_AT_linkage_name - .short 269 # DW_AT_name + .byte 254 # DW_AT_linkage_name + .byte 255 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xd22:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xac2:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9115 # DW_AT_type - .byte 27 # Abbrev [27] 0xd2e:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9241 # DW_AT_type + .byte 24 # Abbrev [24] 0xace:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9131 # DW_AT_type - .byte 33 # Abbrev [33] 0xd3a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xd3c:0x5 DW_TAG_template_type_parameter - .long 7401 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9257 # DW_AT_type + .byte 30 # Abbrev [30] 0xada:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xadc:0x5 DW_TAG_template_type_parameter + .long 7503 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xd43:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xae3:0x2f DW_TAG_subprogram .byte 61 # DW_AT_low_pc .long .Lfunc_end60-.Lfunc_begin60 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 270 # DW_AT_linkage_name - .short 271 # DW_AT_name + .short 256 # DW_AT_linkage_name + .short 257 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xd51:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xaf1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9148 # DW_AT_type - .byte 27 # Abbrev [27] 0xd5d:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9274 # DW_AT_type + .byte 24 # Abbrev [24] 0xafd:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9164 # DW_AT_type - .byte 33 # Abbrev [33] 0xd69:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xd6b:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9290 # DW_AT_type + .byte 30 # Abbrev [30] 0xb09:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xb0b:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0xd72:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0xb12:0x2f DW_TAG_subprogram .byte 62 # DW_AT_low_pc .long .Lfunc_end61-.Lfunc_begin61 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 272 # DW_AT_linkage_name - .short 273 # DW_AT_name + .short 258 # DW_AT_linkage_name + .short 259 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xd80:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0xb20:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9181 # DW_AT_type - .byte 27 # Abbrev [27] 0xd8c:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9307 # DW_AT_type + .byte 24 # Abbrev [24] 0xb2c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9197 # DW_AT_type - .byte 33 # Abbrev [33] 0xd98:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xd9a:0x5 DW_TAG_template_type_parameter - .long 7407 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9323 # DW_AT_type + .byte 30 # Abbrev [30] 0xb38:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xb3a:0x5 DW_TAG_template_type_parameter + .long 7509 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0xda1:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0xb41:0x2f DW_TAG_subprogram .byte 63 # DW_AT_low_pc .long .Lfunc_end62-.Lfunc_begin62 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 274 # DW_AT_linkage_name - .short 275 # DW_AT_name + .short 260 # DW_AT_linkage_name + .short 261 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xdaf:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0xb4f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9214 # DW_AT_type - .byte 27 # Abbrev [27] 0xdbb:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9340 # DW_AT_type + .byte 24 # Abbrev [24] 0xb5b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9230 # DW_AT_type - .byte 33 # Abbrev [33] 0xdc7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xdc9:0x5 DW_TAG_template_type_parameter - .long 971 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9356 # DW_AT_type + .byte 30 # Abbrev [30] 0xb67:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xb69:0x5 DW_TAG_template_type_parameter + .long 376 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0xdd0:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0xb70:0x2f DW_TAG_subprogram .byte 64 # DW_AT_low_pc .long .Lfunc_end63-.Lfunc_begin63 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 276 # DW_AT_linkage_name - .short 277 # DW_AT_name + .short 262 # DW_AT_linkage_name + .short 263 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0xdde:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0xb7e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9247 # DW_AT_type - .byte 27 # Abbrev [27] 0xdea:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9373 # DW_AT_type + .byte 24 # Abbrev [24] 0xb8a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9263 # DW_AT_type - .byte 33 # Abbrev [33] 0xdf6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xdf8:0x5 DW_TAG_template_type_parameter - .long 7412 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9389 # DW_AT_type + .byte 30 # Abbrev [30] 0xb96:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xb98:0x5 DW_TAG_template_type_parameter + .long 7514 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xdff:0x1f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xb9f:0x1f DW_TAG_subprogram .byte 65 # DW_AT_low_pc .long .Lfunc_end64-.Lfunc_begin64 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 280 # DW_AT_linkage_name - .short 281 # DW_AT_name + .short 266 # DW_AT_linkage_name + .short 267 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 62 # DW_AT_decl_line + .byte 64 # DW_AT_decl_line # DW_AT_external - .byte 46 # Abbrev [46] 0xe0d:0x9 DW_TAG_GNU_template_parameter_pack - .short 278 # DW_AT_name - .byte 34 # Abbrev [34] 0xe10:0x5 DW_TAG_template_type_parameter - .long 7210 # DW_AT_type + .byte 41 # Abbrev [41] 0xbad:0x9 DW_TAG_GNU_template_parameter_pack + .short 264 # DW_AT_name + .byte 31 # Abbrev [31] 0xbb0:0x5 DW_TAG_template_type_parameter + .long 7313 # DW_AT_type .byte 0 # End Of Children Mark - .byte 47 # Abbrev [47] 0xe16:0x7 DW_TAG_template_type_parameter + .byte 42 # Abbrev [42] 0xbb6:0x7 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .short 279 # DW_AT_name - # DW_AT_default_value + .short 265 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xe1e:0x19 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xbbe:0x19 DW_TAG_subprogram .byte 66 # DW_AT_low_pc .long .Lfunc_end65-.Lfunc_begin65 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 282 # DW_AT_linkage_name - .short 283 # DW_AT_name + .short 268 # DW_AT_linkage_name + .short 269 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 62 # DW_AT_decl_line + .byte 64 # DW_AT_decl_line # DW_AT_external - .byte 48 # Abbrev [48] 0xe2c:0x3 DW_TAG_GNU_template_parameter_pack - .short 278 # DW_AT_name - .byte 47 # Abbrev [47] 0xe2f:0x7 DW_TAG_template_type_parameter + .byte 43 # Abbrev [43] 0xbcc:0x3 DW_TAG_GNU_template_parameter_pack + .short 264 # DW_AT_name + .byte 42 # Abbrev [42] 0xbcf:0x7 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .short 279 # DW_AT_name - # DW_AT_default_value + .short 265 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xe37:0x19 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xbd7:0x19 DW_TAG_subprogram .byte 67 # DW_AT_low_pc .long .Lfunc_end66-.Lfunc_begin66 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 284 # DW_AT_linkage_name - .short 285 # DW_AT_name + .short 270 # DW_AT_linkage_name + .short 271 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 64 # DW_AT_decl_line + .byte 66 # DW_AT_decl_line # DW_AT_external - .byte 49 # Abbrev [49] 0xe45:0x7 DW_TAG_template_type_parameter - .long 7210 # DW_AT_type - .short 278 # DW_AT_name - .byte 48 # Abbrev [48] 0xe4c:0x3 DW_TAG_GNU_template_parameter_pack - .short 279 # DW_AT_name + .byte 42 # Abbrev [42] 0xbe5:0x7 DW_TAG_template_type_parameter + .long 7313 # DW_AT_type + .short 264 # DW_AT_name + .byte 43 # Abbrev [43] 0xbec:0x3 DW_TAG_GNU_template_parameter_pack + .short 265 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xe50:0x29 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xbf0:0x29 DW_TAG_subprogram .byte 68 # DW_AT_low_pc .long .Lfunc_end67-.Lfunc_begin67 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 286 # DW_AT_linkage_name - .short 287 # DW_AT_name + .short 272 # DW_AT_linkage_name + .short 273 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xe5e:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xbfe:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 7800 # DW_AT_type - .byte 27 # Abbrev [27] 0xe6a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 7921 # DW_AT_type + .byte 24 # Abbrev [24] 0xc0a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9280 # DW_AT_type - .byte 50 # Abbrev [50] 0xe76:0x2 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name + .byte 37 # DW_AT_decl_line + .long 9406 # DW_AT_type + .byte 44 # Abbrev [44] 0xc16:0x2 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xe79:0x34 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xc19:0x34 DW_TAG_subprogram .byte 69 # DW_AT_low_pc .long .Lfunc_end68-.Lfunc_begin68 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 288 # DW_AT_linkage_name - .short 289 # DW_AT_name + .short 274 # DW_AT_linkage_name + .short 275 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xe87:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xc27:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9291 # DW_AT_type - .byte 27 # Abbrev [27] 0xe93:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9417 # DW_AT_type + .byte 24 # Abbrev [24] 0xc33:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9312 # DW_AT_type - .byte 33 # Abbrev [33] 0xe9f:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xea1:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type - .byte 34 # Abbrev [34] 0xea6:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9438 # DW_AT_type + .byte 30 # Abbrev [30] 0xc3f:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xc41:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type + .byte 31 # Abbrev [31] 0xc46:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xead:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xc4d:0x2f DW_TAG_subprogram .byte 70 # DW_AT_low_pc .long .Lfunc_end69-.Lfunc_begin69 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 291 # DW_AT_linkage_name - .short 292 # DW_AT_name + .short 277 # DW_AT_linkage_name + .short 278 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xebb:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xc5b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9334 # DW_AT_type - .byte 27 # Abbrev [27] 0xec7:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9460 # DW_AT_type + .byte 24 # Abbrev [24] 0xc67:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9350 # DW_AT_type - .byte 33 # Abbrev [33] 0xed3:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xed5:0x5 DW_TAG_template_type_parameter - .long 7417 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9476 # DW_AT_type + .byte 30 # Abbrev [30] 0xc73:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xc75:0x5 DW_TAG_template_type_parameter + .long 7519 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0xedc:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0xc7c:0x2f DW_TAG_subprogram .byte 71 # DW_AT_low_pc .long .Lfunc_end70-.Lfunc_begin70 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 293 # DW_AT_linkage_name - .short 294 # DW_AT_name + .short 279 # DW_AT_linkage_name + .short 280 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0xeea:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0xc8a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9367 # DW_AT_type - .byte 27 # Abbrev [27] 0xef6:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9493 # DW_AT_type + .byte 24 # Abbrev [24] 0xc96:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9383 # DW_AT_type - .byte 33 # Abbrev [33] 0xf02:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0xf04:0x5 DW_TAG_template_type_parameter - .long 7438 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9509 # DW_AT_type + .byte 30 # Abbrev [30] 0xca2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xca4:0x5 DW_TAG_template_type_parameter + .long 7540 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 14 # Abbrev [14] 0xf0b:0x20e DW_TAG_structure_type + .byte 14 # Abbrev [14] 0xcab:0x20e DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 77 # DW_AT_name + .byte 25 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 65 # DW_AT_decl_line - .byte 51 # Abbrev [51] 0xf11:0x16 DW_TAG_subprogram - .byte 78 # DW_AT_linkage_name - .byte 79 # DW_AT_name - .byte 0 # DW_AT_decl_file .byte 67 # DW_AT_decl_line + .byte 17 # Abbrev [17] 0xcb1:0x16 DW_TAG_subprogram + .byte 26 # DW_AT_linkage_name + .byte 27 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 69 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf16:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xcb6:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf1c:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xcbc:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xf21:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xcc1:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xf27:0x16 DW_TAG_subprogram - .byte 80 # DW_AT_linkage_name - .byte 81 # DW_AT_name + .byte 17 # Abbrev [17] 0xcc7:0x16 DW_TAG_subprogram + .byte 28 # DW_AT_linkage_name + .byte 29 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 70 # DW_AT_decl_line + .byte 72 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf2c:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xccc:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf32:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xcd2:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xf37:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xcd7:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xf3d:0x16 DW_TAG_subprogram - .byte 82 # DW_AT_linkage_name - .byte 83 # DW_AT_name + .byte 17 # Abbrev [17] 0xcdd:0x16 DW_TAG_subprogram + .byte 30 # DW_AT_linkage_name + .byte 31 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 73 # DW_AT_decl_line + .byte 75 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf42:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xce2:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf48:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xce8:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xf4d:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xced:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 53 # Abbrev [53] 0xf53:0x15 DW_TAG_subprogram - .byte 84 # DW_AT_linkage_name - .byte 85 # DW_AT_name + .byte 46 # Abbrev [46] 0xcf3:0x15 DW_TAG_subprogram + .byte 32 # DW_AT_linkage_name + .byte 33 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 76 # DW_AT_decl_line - .long 4511 # DW_AT_type + .byte 78 # DW_AT_decl_line + .long 3903 # DW_AT_type # DW_AT_declaration # DW_AT_external - .byte 54 # Abbrev [54] 0xf5c:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xcfc:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - # DW_AT_default_value - .byte 19 # Abbrev [19] 0xf62:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd02:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xf68:0x16 DW_TAG_subprogram - .byte 89 # DW_AT_linkage_name - .byte 90 # DW_AT_name + .byte 17 # Abbrev [17] 0xd08:0x16 DW_TAG_subprogram + .byte 37 # DW_AT_linkage_name + .byte 38 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 80 # DW_AT_decl_line + .byte 82 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf6d:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd0d:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf73:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd13:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xf78:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd18:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xf7e:0x16 DW_TAG_subprogram - .byte 91 # DW_AT_linkage_name - .byte 92 # DW_AT_name + .byte 17 # Abbrev [17] 0xd1e:0x16 DW_TAG_subprogram + .byte 39 # DW_AT_linkage_name + .byte 40 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 83 # DW_AT_decl_line + .byte 85 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf83:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd23:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf89:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd29:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xf8e:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd2e:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xf94:0x16 DW_TAG_subprogram - .byte 93 # DW_AT_linkage_name - .byte 94 # DW_AT_name + .byte 17 # Abbrev [17] 0xd34:0x16 DW_TAG_subprogram + .byte 41 # DW_AT_linkage_name + .byte 42 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 86 # DW_AT_decl_line + .byte 88 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xf99:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd39:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xf9f:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd3f:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xfa4:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd44:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xfaa:0x16 DW_TAG_subprogram - .byte 95 # DW_AT_linkage_name - .byte 96 # DW_AT_name + .byte 17 # Abbrev [17] 0xd4a:0x16 DW_TAG_subprogram + .byte 43 # DW_AT_linkage_name + .byte 44 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 89 # DW_AT_decl_line + .byte 91 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xfaf:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd4f:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xfb5:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd55:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xfba:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd5a:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xfc0:0x16 DW_TAG_subprogram - .byte 97 # DW_AT_linkage_name - .byte 98 # DW_AT_name + .byte 17 # Abbrev [17] 0xd60:0x16 DW_TAG_subprogram + .byte 45 # DW_AT_linkage_name + .byte 46 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 92 # DW_AT_decl_line + .byte 94 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xfc5:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd65:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xfcb:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd6b:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xfd0:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd70:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xfd6:0x16 DW_TAG_subprogram - .byte 99 # DW_AT_linkage_name - .byte 100 # DW_AT_name + .byte 17 # Abbrev [17] 0xd76:0x16 DW_TAG_subprogram + .byte 47 # DW_AT_linkage_name + .byte 48 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 95 # DW_AT_decl_line + .byte 97 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xfdb:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd7b:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xfe1:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd81:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xfe6:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd86:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0xfec:0x16 DW_TAG_subprogram - .byte 101 # DW_AT_linkage_name - .byte 102 # DW_AT_name + .byte 17 # Abbrev [17] 0xd8c:0x16 DW_TAG_subprogram + .byte 49 # DW_AT_linkage_name + .byte 50 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 98 # DW_AT_decl_line + .byte 100 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0xff1:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xd91:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0xff7:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xd97:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0xffc:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xd9c:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1002:0x11 DW_TAG_subprogram - .byte 103 # DW_AT_linkage_name - .byte 104 # DW_AT_name + .byte 17 # Abbrev [17] 0xda2:0x11 DW_TAG_subprogram + .byte 51 # DW_AT_linkage_name + .byte 52 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 101 # DW_AT_decl_line + .byte 103 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x1007:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xda7:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x100d:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xdad:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1013:0x11 DW_TAG_subprogram - .byte 105 # DW_AT_linkage_name - .byte 106 # DW_AT_name + .byte 17 # Abbrev [17] 0xdb3:0x11 DW_TAG_subprogram + .byte 53 # DW_AT_linkage_name + .byte 54 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 104 # DW_AT_decl_line + .byte 106 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x1018:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xdb8:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x101e:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xdbe:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1024:0x16 DW_TAG_subprogram - .byte 107 # DW_AT_linkage_name - .byte 108 # DW_AT_name + .byte 17 # Abbrev [17] 0xdc4:0x16 DW_TAG_subprogram + .byte 55 # DW_AT_linkage_name + .byte 56 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 107 # DW_AT_decl_line + .byte 109 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x1029:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xdc9:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x102f:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xdcf:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0x1034:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xdd4:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x103a:0x16 DW_TAG_subprogram - .byte 109 # DW_AT_linkage_name - .byte 110 # DW_AT_name + .byte 17 # Abbrev [17] 0xdda:0x16 DW_TAG_subprogram + .byte 57 # DW_AT_linkage_name + .byte 58 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 110 # DW_AT_decl_line + .byte 112 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x103f:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xddf:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x1045:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xde5:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0x104a:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xdea:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1050:0x16 DW_TAG_subprogram - .byte 111 # DW_AT_linkage_name - .byte 112 # DW_AT_name + .byte 17 # Abbrev [17] 0xdf0:0x16 DW_TAG_subprogram + .byte 59 # DW_AT_linkage_name + .byte 60 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 113 # DW_AT_decl_line + .byte 115 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x1055:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xdf5:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x105b:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xdfb:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0x1060:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe00:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1066:0x11 DW_TAG_subprogram - .byte 113 # DW_AT_linkage_name - .byte 114 # DW_AT_name + .byte 17 # Abbrev [17] 0xe06:0x11 DW_TAG_subprogram + .byte 61 # DW_AT_linkage_name + .byte 62 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 116 # DW_AT_decl_line + .byte 118 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x106b:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe0b:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x1071:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xe11:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x1077:0x16 DW_TAG_subprogram - .byte 115 # DW_AT_linkage_name - .byte 116 # DW_AT_name + .byte 17 # Abbrev [17] 0xe17:0x16 DW_TAG_subprogram + .byte 63 # DW_AT_linkage_name + .byte 64 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 119 # DW_AT_decl_line + .byte 121 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x107c:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe1c:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x1082:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xe22:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0x1087:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe27:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x108d:0x16 DW_TAG_subprogram - .byte 117 # DW_AT_linkage_name - .byte 118 # DW_AT_name + .byte 17 # Abbrev [17] 0xe2d:0x16 DW_TAG_subprogram + .byte 65 # DW_AT_linkage_name + .byte 66 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 122 # DW_AT_decl_line + .byte 124 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x1092:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe32:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x1098:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xe38:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial - .byte 52 # Abbrev [52] 0x109d:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe3d:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 53 # Abbrev [53] 0x10a3:0x1a DW_TAG_subprogram - .byte 119 # DW_AT_linkage_name - .byte 120 # DW_AT_name + .byte 46 # Abbrev [46] 0xe43:0x1a DW_TAG_subprogram + .byte 67 # DW_AT_linkage_name + .byte 68 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 125 # DW_AT_decl_line - .long 5183 # DW_AT_type + .byte 127 # DW_AT_decl_line + .long 4575 # DW_AT_type # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x10ac:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe4c:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 52 # Abbrev [52] 0x10b2:0x5 DW_TAG_formal_parameter - .long 423 # DW_AT_type - .byte 52 # Abbrev [52] 0x10b7:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe52:0x5 DW_TAG_formal_parameter + .long 4580 # DW_AT_type + .byte 45 # Abbrev [45] 0xe57:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 53 # Abbrev [53] 0x10bd:0x1a DW_TAG_subprogram - .byte 122 # DW_AT_linkage_name - .byte 123 # DW_AT_name + .byte 46 # Abbrev [46] 0xe5d:0x1a DW_TAG_subprogram + .byte 73 # DW_AT_linkage_name + .byte 74 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 132 # DW_AT_decl_line - .long 5183 # DW_AT_type + .byte 134 # DW_AT_decl_line + .long 4575 # DW_AT_type # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x10c6:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe66:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 52 # Abbrev [52] 0x10cc:0x5 DW_TAG_formal_parameter - .long 423 # DW_AT_type - .byte 52 # Abbrev [52] 0x10d1:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe6c:0x5 DW_TAG_formal_parameter + .long 4580 # DW_AT_type + .byte 45 # Abbrev [45] 0xe71:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x10d7:0x16 DW_TAG_subprogram - .byte 124 # DW_AT_linkage_name - .byte 125 # DW_AT_name + .byte 17 # Abbrev [17] 0xe77:0x16 DW_TAG_subprogram + .byte 75 # DW_AT_linkage_name + .byte 76 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 129 # DW_AT_decl_line + .byte 131 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x10dc:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe7c:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 52 # Abbrev [52] 0x10e2:0x5 DW_TAG_formal_parameter - .long 5183 # DW_AT_type - .byte 52 # Abbrev [52] 0x10e7:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe82:0x5 DW_TAG_formal_parameter + .long 4575 # DW_AT_type + .byte 45 # Abbrev [45] 0xe87:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 51 # Abbrev [51] 0x10ed:0x16 DW_TAG_subprogram - .byte 126 # DW_AT_linkage_name - .byte 127 # DW_AT_name + .byte 17 # Abbrev [17] 0xe8d:0x16 DW_TAG_subprogram + .byte 77 # DW_AT_linkage_name + .byte 78 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 136 # DW_AT_decl_line + .byte 138 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x10f2:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xe92:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 52 # Abbrev [52] 0x10f8:0x5 DW_TAG_formal_parameter - .long 5183 # DW_AT_type - .byte 52 # Abbrev [52] 0x10fd:0x5 DW_TAG_formal_parameter + .byte 45 # Abbrev [45] 0xe98:0x5 DW_TAG_formal_parameter + .long 4575 # DW_AT_type + .byte 45 # Abbrev [45] 0xe9d:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 53 # Abbrev [53] 0x1103:0x15 DW_TAG_subprogram - .byte 128 # DW_AT_linkage_name - .byte 129 # DW_AT_name + .byte 46 # Abbrev [46] 0xea3:0x15 DW_TAG_subprogram + .byte 79 # DW_AT_linkage_name + .byte 80 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 139 # DW_AT_decl_line + .byte 141 # DW_AT_decl_line .long 54 # DW_AT_type # DW_AT_declaration # DW_AT_external - .byte 15 # Abbrev [15] 0x110c:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xeac:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - .byte 19 # Abbrev [19] 0x1112:0x5 DW_TAG_formal_parameter - .long 4377 # DW_AT_type + .byte 19 # Abbrev [19] 0xeb2:0x5 DW_TAG_formal_parameter + .long 3769 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1119:0x5 DW_TAG_pointer_type - .long 3851 # DW_AT_type - .byte 56 # Abbrev [56] 0x111e:0x2b DW_TAG_subprogram + .byte 47 # Abbrev [47] 0xeb9:0x5 DW_TAG_pointer_type + .long 3243 # DW_AT_type + .byte 48 # Abbrev [48] 0xebe:0x2b DW_TAG_subprogram .byte 72 # DW_AT_low_pc .long .Lfunc_end71-.Lfunc_begin71 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4398 # DW_AT_object_pointer - .long 3857 # DW_AT_specification - .byte 57 # Abbrev [57] 0x112e:0xa DW_TAG_formal_parameter + .long 3790 # DW_AT_object_pointer + .long 3249 # DW_AT_specification + .byte 49 # Abbrev [49] 0xece:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1138:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xed8:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 67 # DW_AT_decl_line + .byte 69 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1142:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xee2:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1149:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xee9:0x2b DW_TAG_subprogram .byte 73 # DW_AT_low_pc .long .Lfunc_end72-.Lfunc_begin72 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4441 # DW_AT_object_pointer - .long 3879 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1159:0xa DW_TAG_formal_parameter + .long 3833 # DW_AT_object_pointer + .long 3271 # DW_AT_specification + .byte 49 # Abbrev [49] 0xef9:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1163:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xf03:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 70 # DW_AT_decl_line + .byte 72 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x116d:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xf0d:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1174:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xf14:0x2b DW_TAG_subprogram .byte 74 # DW_AT_low_pc .long .Lfunc_end73-.Lfunc_begin73 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4484 # DW_AT_object_pointer - .long 3901 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1184:0xa DW_TAG_formal_parameter + .long 3876 # DW_AT_object_pointer + .long 3293 # DW_AT_specification + .byte 49 # Abbrev [49] 0xf24:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x118e:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xf2e:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 73 # DW_AT_decl_line + .byte 75 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1198:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xf38:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x119f:0x5 DW_TAG_pointer_type - .long 4516 # DW_AT_type - .byte 14 # Abbrev [14] 0x11a4:0xf DW_TAG_structure_type + .byte 47 # Abbrev [47] 0xf3f:0x5 DW_TAG_pointer_type + .long 3908 # DW_AT_type + .byte 14 # Abbrev [14] 0xf44:0xf DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 88 # DW_AT_name + .byte 36 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x11aa:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x11ac:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0xf4a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0xf4c:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 3 # Abbrev [3] 0x11b3:0x4 DW_TAG_base_type - .byte 87 # DW_AT_name + .byte 3 # Abbrev [3] 0xf53:0x4 DW_TAG_base_type + .byte 35 # DW_AT_name .byte 4 # DW_AT_encoding .byte 4 # DW_AT_byte_size - .byte 56 # Abbrev [56] 0x11b7:0x21 DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xf57:0x21 DW_TAG_subprogram .byte 75 # DW_AT_low_pc .long .Lfunc_end74-.Lfunc_begin74 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4551 # DW_AT_object_pointer - .long 3923 # DW_AT_specification - .byte 57 # Abbrev [57] 0x11c7:0xa DW_TAG_formal_parameter + .long 3943 # DW_AT_object_pointer + .long 3315 # DW_AT_specification + .byte 49 # Abbrev [49] 0xf67:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 54 # Abbrev [54] 0x11d1:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xf71:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name - # DW_AT_default_value .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x11d8:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xf78:0x2b DW_TAG_subprogram .byte 76 # DW_AT_low_pc .long .Lfunc_end75-.Lfunc_begin75 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4584 # DW_AT_object_pointer - .long 3944 # DW_AT_specification - .byte 57 # Abbrev [57] 0x11e8:0xa DW_TAG_formal_parameter + .long 3976 # DW_AT_object_pointer + .long 3336 # DW_AT_specification + .byte 49 # Abbrev [49] 0xf88:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x11f2:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xf92:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 80 # DW_AT_decl_line + .byte 82 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x11fc:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xf9c:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1203:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xfa3:0x2b DW_TAG_subprogram .byte 77 # DW_AT_low_pc .long .Lfunc_end76-.Lfunc_begin76 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4627 # DW_AT_object_pointer - .long 3966 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1213:0xa DW_TAG_formal_parameter + .long 4019 # DW_AT_object_pointer + .long 3358 # DW_AT_specification + .byte 49 # Abbrev [49] 0xfb3:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x121d:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xfbd:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 83 # DW_AT_decl_line + .byte 85 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1227:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xfc7:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x122e:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xfce:0x2b DW_TAG_subprogram .byte 78 # DW_AT_low_pc .long .Lfunc_end77-.Lfunc_begin77 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4670 # DW_AT_object_pointer - .long 3988 # DW_AT_specification - .byte 57 # Abbrev [57] 0x123e:0xa DW_TAG_formal_parameter + .long 4062 # DW_AT_object_pointer + .long 3380 # DW_AT_specification + .byte 49 # Abbrev [49] 0xfde:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1248:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0xfe8:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 86 # DW_AT_decl_line + .byte 88 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1252:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0xff2:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1259:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0xff9:0x2b DW_TAG_subprogram .byte 79 # DW_AT_low_pc .long .Lfunc_end78-.Lfunc_begin78 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4713 # DW_AT_object_pointer - .long 4010 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1269:0xa DW_TAG_formal_parameter + .long 4105 # DW_AT_object_pointer + .long 3402 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1009:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1273:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x1013:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 89 # DW_AT_decl_line + .byte 91 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x127d:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x101d:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1284:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x1024:0x2b DW_TAG_subprogram .byte 80 # DW_AT_low_pc .long .Lfunc_end79-.Lfunc_begin79 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4756 # DW_AT_object_pointer - .long 4032 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1294:0xa DW_TAG_formal_parameter + .long 4148 # DW_AT_object_pointer + .long 3424 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1034:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x129e:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x103e:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 92 # DW_AT_decl_line + .byte 94 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x12a8:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1048:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x12af:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x104f:0x2b DW_TAG_subprogram .byte 81 # DW_AT_low_pc .long .Lfunc_end80-.Lfunc_begin80 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4799 # DW_AT_object_pointer - .long 4054 # DW_AT_specification - .byte 57 # Abbrev [57] 0x12bf:0xa DW_TAG_formal_parameter + .long 4191 # DW_AT_object_pointer + .long 3446 # DW_AT_specification + .byte 49 # Abbrev [49] 0x105f:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x12c9:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x1069:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 95 # DW_AT_decl_line + .byte 97 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x12d3:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1073:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x12da:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x107a:0x2b DW_TAG_subprogram .byte 82 # DW_AT_low_pc .long .Lfunc_end81-.Lfunc_begin81 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4842 # DW_AT_object_pointer - .long 4076 # DW_AT_specification - .byte 57 # Abbrev [57] 0x12ea:0xa DW_TAG_formal_parameter + .long 4234 # DW_AT_object_pointer + .long 3468 # DW_AT_specification + .byte 49 # Abbrev [49] 0x108a:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x12f4:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x1094:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 98 # DW_AT_decl_line + .byte 100 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x12fe:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x109e:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1305:0x21 DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x10a5:0x21 DW_TAG_subprogram .byte 83 # DW_AT_low_pc .long .Lfunc_end82-.Lfunc_begin82 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4885 # DW_AT_object_pointer - .long 4098 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1315:0xa DW_TAG_formal_parameter + .long 4277 # DW_AT_object_pointer + .long 3490 # DW_AT_specification + .byte 49 # Abbrev [49] 0x10b5:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 15 # Abbrev [15] 0x131f:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x10bf:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1326:0x21 DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x10c6:0x21 DW_TAG_subprogram .byte 84 # DW_AT_low_pc .long .Lfunc_end83-.Lfunc_begin83 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4918 # DW_AT_object_pointer - .long 4115 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1336:0xa DW_TAG_formal_parameter + .long 4310 # DW_AT_object_pointer + .long 3507 # DW_AT_specification + .byte 49 # Abbrev [49] 0x10d6:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 15 # Abbrev [15] 0x1340:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x10e0:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1347:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x10e7:0x2b DW_TAG_subprogram .byte 85 # DW_AT_low_pc .long .Lfunc_end84-.Lfunc_begin84 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4951 # DW_AT_object_pointer - .long 4132 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1357:0xa DW_TAG_formal_parameter + .long 4343 # DW_AT_object_pointer + .long 3524 # DW_AT_specification + .byte 49 # Abbrev [49] 0x10f7:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1361:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x1101:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 107 # DW_AT_decl_line + .byte 109 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x136b:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x110b:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1372:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x1112:0x2b DW_TAG_subprogram .byte 86 # DW_AT_low_pc .long .Lfunc_end85-.Lfunc_begin85 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4994 # DW_AT_object_pointer - .long 4154 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1382:0xa DW_TAG_formal_parameter + .long 4386 # DW_AT_object_pointer + .long 3546 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1122:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x138c:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x112c:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 110 # DW_AT_decl_line + .byte 112 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1396:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1136:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x139d:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x113d:0x2b DW_TAG_subprogram .byte 87 # DW_AT_low_pc .long .Lfunc_end86-.Lfunc_begin86 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 5037 # DW_AT_object_pointer - .long 4176 # DW_AT_specification - .byte 57 # Abbrev [57] 0x13ad:0xa DW_TAG_formal_parameter + .long 4429 # DW_AT_object_pointer + .long 3568 # DW_AT_specification + .byte 49 # Abbrev [49] 0x114d:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x13b7:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x1157:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 113 # DW_AT_decl_line + .byte 115 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x13c1:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1161:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x13c8:0x21 DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x1168:0x21 DW_TAG_subprogram .byte 88 # DW_AT_low_pc .long .Lfunc_end87-.Lfunc_begin87 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 5080 # DW_AT_object_pointer - .long 4198 # DW_AT_specification - .byte 57 # Abbrev [57] 0x13d8:0xa DW_TAG_formal_parameter + .long 4472 # DW_AT_object_pointer + .long 3590 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1178:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 15 # Abbrev [15] 0x13e2:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1182:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x13e9:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x1189:0x2b DW_TAG_subprogram .byte 89 # DW_AT_low_pc .long .Lfunc_end88-.Lfunc_begin88 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 5113 # DW_AT_object_pointer - .long 4215 # DW_AT_specification - .byte 57 # Abbrev [57] 0x13f9:0xa DW_TAG_formal_parameter + .long 4505 # DW_AT_object_pointer + .long 3607 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1199:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x1403:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x11a3:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 119 # DW_AT_decl_line + .byte 121 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x140d:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x11ad:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 56 # Abbrev [56] 0x1414:0x2b DW_TAG_subprogram + .byte 48 # Abbrev [48] 0x11b4:0x2b DW_TAG_subprogram .byte 90 # DW_AT_low_pc .long .Lfunc_end89-.Lfunc_begin89 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 5156 # DW_AT_object_pointer - .long 4237 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1424:0xa DW_TAG_formal_parameter + .long 4548 # DW_AT_object_pointer + .long 3629 # DW_AT_specification + .byte 49 # Abbrev [49] 0x11c4:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9400 # DW_AT_type + .short 486 # DW_AT_name + .long 9526 # DW_AT_type # DW_AT_artificial - .byte 24 # Abbrev [24] 0x142e:0xa DW_TAG_formal_parameter + .byte 21 # Abbrev [21] 0x11ce:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 122 # DW_AT_decl_line + .byte 124 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1438:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x11d8:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 58 # Abbrev [58] 0x143f:0x1 DW_TAG_pointer_type - .byte 59 # Abbrev [59] 0x1440:0x13 DW_TAG_subprogram + .byte 50 # Abbrev [50] 0x11df:0x1 DW_TAG_pointer_type + .byte 8 # Abbrev [8] 0x11e0:0xd9 DW_TAG_namespace + .byte 69 # DW_AT_name + .byte 51 # Abbrev [51] 0x11e2:0xd6 DW_TAG_namespace + .byte 70 # DW_AT_name + # DW_AT_export_symbols + .byte 52 # Abbrev [52] 0x11e4:0x8 DW_TAG_typedef + .long 4793 # DW_AT_type + .byte 72 # DW_AT_name + .byte 1 # DW_AT_decl_file + .byte 20 # DW_AT_decl_line + .byte 53 # Abbrev [53] 0x11ec:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 158 # DW_AT_decl_line + .long 7031 # DW_AT_import + .byte 53 # Abbrev [53] 0x11f3:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 159 # DW_AT_decl_line + .long 7044 # DW_AT_import + .byte 53 # Abbrev [53] 0x11fa:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 160 # DW_AT_decl_line + .long 7056 # DW_AT_import + .byte 53 # Abbrev [53] 0x1201:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 161 # DW_AT_decl_line + .long 7064 # DW_AT_import + .byte 53 # Abbrev [53] 0x1208:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 163 # DW_AT_decl_line + .long 7076 # DW_AT_import + .byte 53 # Abbrev [53] 0x120f:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 164 # DW_AT_decl_line + .long 7085 # DW_AT_import + .byte 53 # Abbrev [53] 0x1216:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 165 # DW_AT_decl_line + .long 7097 # DW_AT_import + .byte 53 # Abbrev [53] 0x121d:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 166 # DW_AT_decl_line + .long 7105 # DW_AT_import + .byte 53 # Abbrev [53] 0x1224:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 168 # DW_AT_decl_line + .long 7113 # DW_AT_import + .byte 53 # Abbrev [53] 0x122b:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 169 # DW_AT_decl_line + .long 7122 # DW_AT_import + .byte 53 # Abbrev [53] 0x1232:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 170 # DW_AT_decl_line + .long 7131 # DW_AT_import + .byte 53 # Abbrev [53] 0x1239:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 171 # DW_AT_decl_line + .long 7139 # DW_AT_import + .byte 53 # Abbrev [53] 0x1240:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 173 # DW_AT_decl_line + .long 7147 # DW_AT_import + .byte 53 # Abbrev [53] 0x1247:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 174 # DW_AT_decl_line + .long 7156 # DW_AT_import + .byte 53 # Abbrev [53] 0x124e:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 175 # DW_AT_decl_line + .long 7165 # DW_AT_import + .byte 53 # Abbrev [53] 0x1255:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 176 # DW_AT_decl_line + .long 7173 # DW_AT_import + .byte 53 # Abbrev [53] 0x125c:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 178 # DW_AT_decl_line + .long 7181 # DW_AT_import + .byte 53 # Abbrev [53] 0x1263:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 179 # DW_AT_decl_line + .long 7190 # DW_AT_import + .byte 53 # Abbrev [53] 0x126a:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 180 # DW_AT_decl_line + .long 7199 # DW_AT_import + .byte 53 # Abbrev [53] 0x1271:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 181 # DW_AT_decl_line + .long 7207 # DW_AT_import + .byte 53 # Abbrev [53] 0x1278:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 183 # DW_AT_decl_line + .long 7215 # DW_AT_import + .byte 53 # Abbrev [53] 0x127f:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 184 # DW_AT_decl_line + .long 7224 # DW_AT_import + .byte 53 # Abbrev [53] 0x1286:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 185 # DW_AT_decl_line + .long 7233 # DW_AT_import + .byte 53 # Abbrev [53] 0x128d:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 186 # DW_AT_decl_line + .long 7241 # DW_AT_import + .byte 53 # Abbrev [53] 0x1294:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 188 # DW_AT_decl_line + .long 7249 # DW_AT_import + .byte 53 # Abbrev [53] 0x129b:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 189 # DW_AT_decl_line + .long 7258 # DW_AT_import + .byte 53 # Abbrev [53] 0x12a2:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 191 # DW_AT_decl_line + .long 7267 # DW_AT_import + .byte 53 # Abbrev [53] 0x12a9:0x7 DW_TAG_imported_declaration + .byte 3 # DW_AT_decl_file + .byte 192 # DW_AT_decl_line + .long 7276 # DW_AT_import + .byte 53 # Abbrev [53] 0x12b0:0x7 DW_TAG_imported_declaration + .byte 5 # DW_AT_decl_file + .byte 22 # DW_AT_decl_line + .long 7285 # DW_AT_import + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark + .byte 3 # Abbrev [3] 0x12b9:0x4 DW_TAG_base_type + .byte 71 # DW_AT_name + .byte 7 # DW_AT_encoding + .byte 8 # DW_AT_byte_size + .byte 54 # Abbrev [54] 0x12bd:0x13 DW_TAG_subprogram .byte 91 # DW_AT_low_pc .long .Lfunc_end90-.Lfunc_begin90 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4259 # DW_AT_specification - .byte 15 # Abbrev [15] 0x144c:0x6 DW_TAG_template_type_parameter + .long 3651 # DW_AT_specification + .byte 15 # Abbrev [15] 0x12c9:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 59 # Abbrev [59] 0x1453:0x13 DW_TAG_subprogram + .byte 54 # Abbrev [54] 0x12d0:0x13 DW_TAG_subprogram .byte 92 # DW_AT_low_pc .long .Lfunc_end91-.Lfunc_begin91 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4285 # DW_AT_specification - .byte 15 # Abbrev [15] 0x145f:0x6 DW_TAG_template_type_parameter + .long 3677 # DW_AT_specification + .byte 15 # Abbrev [15] 0x12dc:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 59 # Abbrev [59] 0x1466:0x27 DW_TAG_subprogram + .byte 54 # Abbrev [54] 0x12e3:0x27 DW_TAG_subprogram .byte 93 # DW_AT_low_pc .long .Lfunc_end92-.Lfunc_begin92 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4311 # DW_AT_specification - .byte 24 # Abbrev [24] 0x1472:0xa DW_TAG_formal_parameter + .long 3703 # DW_AT_specification + .byte 21 # Abbrev [21] 0x12ef:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 .byte 0 # DW_AT_decl_file - .byte 129 # DW_AT_decl_line - .long 5183 # DW_AT_type - .byte 24 # Abbrev [24] 0x147c:0xa DW_TAG_formal_parameter + .byte 131 # DW_AT_decl_line + .long 4575 # DW_AT_type + .byte 21 # Abbrev [21] 0x12f9:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 129 # DW_AT_decl_line + .byte 131 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x1486:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1303:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 59 # Abbrev [59] 0x148d:0x27 DW_TAG_subprogram + .byte 54 # Abbrev [54] 0x130a:0x27 DW_TAG_subprogram .byte 94 # DW_AT_low_pc .long .Lfunc_end93-.Lfunc_begin93 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4333 # DW_AT_specification - .byte 24 # Abbrev [24] 0x1499:0xa DW_TAG_formal_parameter + .long 3725 # DW_AT_specification + .byte 21 # Abbrev [21] 0x1316:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 .byte 0 # DW_AT_decl_file - .byte 136 # DW_AT_decl_line - .long 5183 # DW_AT_type - .byte 24 # Abbrev [24] 0x14a3:0xa DW_TAG_formal_parameter + .byte 138 # DW_AT_decl_line + .long 4575 # DW_AT_type + .byte 21 # Abbrev [21] 0x1320:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 116 .byte 0 # DW_AT_decl_file - .byte 136 # DW_AT_decl_line + .byte 138 # DW_AT_decl_line .long 54 # DW_AT_type - .byte 15 # Abbrev [15] 0x14ad:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x132a:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 59 # Abbrev [59] 0x14b4:0x13 DW_TAG_subprogram + .byte 54 # Abbrev [54] 0x1331:0x13 DW_TAG_subprogram .byte 95 # DW_AT_low_pc .long .Lfunc_end94-.Lfunc_begin94 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 4355 # DW_AT_specification - .byte 15 # Abbrev [15] 0x14c0:0x6 DW_TAG_template_type_parameter + .long 3747 # DW_AT_specification + .byte 15 # Abbrev [15] 0x133d:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x14c7:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0x1344:0x2f DW_TAG_subprogram .byte 96 # DW_AT_low_pc .long .Lfunc_end95-.Lfunc_begin95 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 296 # DW_AT_linkage_name - .short 297 # DW_AT_name + .short 282 # DW_AT_linkage_name + .short 283 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x14d5:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x1352:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9405 # DW_AT_type - .byte 27 # Abbrev [27] 0x14e1:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9531 # DW_AT_type + .byte 24 # Abbrev [24] 0x135e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9421 # DW_AT_type - .byte 33 # Abbrev [33] 0x14ed:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x14ef:0x5 DW_TAG_template_type_parameter - .long 976 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9547 # DW_AT_type + .byte 30 # Abbrev [30] 0x136a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x136c:0x5 DW_TAG_template_type_parameter + .long 381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x14f6:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1373:0x2f DW_TAG_subprogram .byte 97 # DW_AT_low_pc .long .Lfunc_end96-.Lfunc_begin96 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 298 # DW_AT_linkage_name - .short 299 # DW_AT_name + .short 284 # DW_AT_linkage_name + .short 285 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1504:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1381:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9438 # DW_AT_type - .byte 27 # Abbrev [27] 0x1510:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9564 # DW_AT_type + .byte 24 # Abbrev [24] 0x138d:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9454 # DW_AT_type - .byte 33 # Abbrev [33] 0x151c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x151e:0x5 DW_TAG_template_type_parameter - .long 7449 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9580 # DW_AT_type + .byte 30 # Abbrev [30] 0x1399:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x139b:0x5 DW_TAG_template_type_parameter + .long 7551 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1525:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x13a2:0x2f DW_TAG_subprogram .byte 98 # DW_AT_low_pc .long .Lfunc_end97-.Lfunc_begin97 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 300 # DW_AT_linkage_name - .short 301 # DW_AT_name + .short 286 # DW_AT_linkage_name + .short 287 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1533:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x13b0:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9471 # DW_AT_type - .byte 27 # Abbrev [27] 0x153f:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9597 # DW_AT_type + .byte 24 # Abbrev [24] 0x13bc:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9487 # DW_AT_type - .byte 33 # Abbrev [33] 0x154b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x154d:0x5 DW_TAG_template_type_parameter - .long 7454 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9613 # DW_AT_type + .byte 30 # Abbrev [30] 0x13c8:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x13ca:0x5 DW_TAG_template_type_parameter + .long 7556 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1554:0x13 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x13d1:0x13 DW_TAG_subprogram .byte 99 # DW_AT_low_pc .long .Lfunc_end98-.Lfunc_begin98 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 303 # DW_AT_linkage_name - .short 304 # DW_AT_name + .short 289 # DW_AT_linkage_name + .short 290 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 143 # DW_AT_decl_line + .byte 145 # DW_AT_decl_line # DW_AT_external - .byte 13 # Abbrev [13] 0x1562:0x4 DW_TAG_GNU_template_template_param + .byte 13 # Abbrev [13] 0x13df:0x4 DW_TAG_GNU_template_template_param .byte 20 # DW_AT_name - .short 302 # DW_AT_GNU_template_name + .short 288 # DW_AT_GNU_template_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1567:0x1a DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x13e4:0x1a DW_TAG_subprogram .byte 100 # DW_AT_low_pc .long .Lfunc_end99-.Lfunc_begin99 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 305 # DW_AT_linkage_name - .short 306 # DW_AT_name + .short 291 # DW_AT_linkage_name + .short 292 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 144 # DW_AT_decl_line + .byte 146 # DW_AT_decl_line # DW_AT_external - .byte 13 # Abbrev [13] 0x1575:0x4 DW_TAG_GNU_template_template_param + .byte 13 # Abbrev [13] 0x13f2:0x4 DW_TAG_GNU_template_template_param .byte 20 # DW_AT_name - .short 302 # DW_AT_GNU_template_name - .byte 49 # Abbrev [49] 0x1579:0x7 DW_TAG_template_type_parameter + .short 288 # DW_AT_GNU_template_name + .byte 42 # Abbrev [42] 0x13f6:0x7 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .short 279 # DW_AT_name + .short 265 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1581:0x34 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x13fe:0x34 DW_TAG_subprogram .byte 102 # DW_AT_low_pc .long .Lfunc_end101-.Lfunc_begin101 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 310 # DW_AT_linkage_name - .short 311 # DW_AT_name + .short 296 # DW_AT_linkage_name + .short 297 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x158f:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x140c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9504 # DW_AT_type - .byte 27 # Abbrev [27] 0x159b:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9630 # DW_AT_type + .byte 24 # Abbrev [24] 0x1418:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9525 # DW_AT_type - .byte 33 # Abbrev [33] 0x15a7:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x15a9:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type - .byte 34 # Abbrev [34] 0x15ae:0x5 DW_TAG_template_type_parameter - .long 7459 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9651 # DW_AT_type + .byte 30 # Abbrev [30] 0x1424:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1426:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type + .byte 31 # Abbrev [31] 0x142b:0x5 DW_TAG_template_type_parameter + .long 7561 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x15b5:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1432:0x2f DW_TAG_subprogram .byte 103 # DW_AT_low_pc .long .Lfunc_end102-.Lfunc_begin102 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 313 # DW_AT_linkage_name - .short 314 # DW_AT_name + .short 299 # DW_AT_linkage_name + .short 300 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x15c3:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1440:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9547 # DW_AT_type - .byte 27 # Abbrev [27] 0x15cf:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9673 # DW_AT_type + .byte 24 # Abbrev [24] 0x144c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9563 # DW_AT_type - .byte 33 # Abbrev [33] 0x15db:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x15dd:0x5 DW_TAG_template_type_parameter - .long 7464 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9689 # DW_AT_type + .byte 30 # Abbrev [30] 0x1458:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x145a:0x5 DW_TAG_template_type_parameter + .long 7566 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x15e4:0x13 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1461:0x13 DW_TAG_subprogram .byte 104 # DW_AT_low_pc .long .Lfunc_end103-.Lfunc_begin103 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 316 # DW_AT_linkage_name - .short 317 # DW_AT_name + .short 302 # DW_AT_linkage_name + .short 303 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 143 # DW_AT_decl_line + .byte 145 # DW_AT_decl_line # DW_AT_external - .byte 13 # Abbrev [13] 0x15f2:0x4 DW_TAG_GNU_template_template_param + .byte 13 # Abbrev [13] 0x146f:0x4 DW_TAG_GNU_template_template_param .byte 20 # DW_AT_name - .short 315 # DW_AT_GNU_template_name + .short 301 # DW_AT_GNU_template_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x15f7:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1474:0x2f DW_TAG_subprogram .byte 105 # DW_AT_low_pc .long .Lfunc_end104-.Lfunc_begin104 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 318 # DW_AT_linkage_name - .short 319 # DW_AT_name + .short 304 # DW_AT_linkage_name + .short 305 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1605:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1482:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9580 # DW_AT_type - .byte 27 # Abbrev [27] 0x1611:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9706 # DW_AT_type + .byte 24 # Abbrev [24] 0x148e:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9596 # DW_AT_type - .byte 33 # Abbrev [33] 0x161d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x161f:0x5 DW_TAG_template_type_parameter - .long 7478 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9722 # DW_AT_type + .byte 30 # Abbrev [30] 0x149a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x149c:0x5 DW_TAG_template_type_parameter + .long 7580 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1626:0x39 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x14a3:0x39 DW_TAG_subprogram .byte 106 # DW_AT_low_pc .long .Lfunc_end105-.Lfunc_begin105 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 320 # DW_AT_linkage_name - .short 321 # DW_AT_name + .short 306 # DW_AT_linkage_name + .short 307 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1634:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x14b1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9613 # DW_AT_type - .byte 27 # Abbrev [27] 0x1640:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9739 # DW_AT_type + .byte 24 # Abbrev [24] 0x14bd:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9639 # DW_AT_type - .byte 33 # Abbrev [33] 0x164c:0x12 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x164e:0x5 DW_TAG_template_type_parameter + .byte 37 # DW_AT_decl_line + .long 9765 # DW_AT_type + .byte 30 # Abbrev [30] 0x14c9:0x12 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x14cb:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x1653:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type - .byte 34 # Abbrev [34] 0x1658:0x5 DW_TAG_template_type_parameter - .long 7483 # DW_AT_type + .byte 31 # Abbrev [31] 0x14d0:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type + .byte 31 # Abbrev [31] 0x14d5:0x5 DW_TAG_template_type_parameter + .long 7585 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x165f:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x14dc:0x2f DW_TAG_subprogram .byte 107 # DW_AT_low_pc .long .Lfunc_end106-.Lfunc_begin106 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 322 # DW_AT_linkage_name - .short 323 # DW_AT_name + .short 308 # DW_AT_linkage_name + .short 309 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x166d:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x14ea:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9666 # DW_AT_type - .byte 27 # Abbrev [27] 0x1679:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9792 # DW_AT_type + .byte 24 # Abbrev [24] 0x14f6:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9682 # DW_AT_type - .byte 33 # Abbrev [33] 0x1685:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1687:0x5 DW_TAG_template_type_parameter - .long 7488 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9808 # DW_AT_type + .byte 30 # Abbrev [30] 0x1502:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1504:0x5 DW_TAG_template_type_parameter + .long 7590 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x168e:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x150b:0x2f DW_TAG_subprogram .byte 108 # DW_AT_low_pc .long .Lfunc_end107-.Lfunc_begin107 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 324 # DW_AT_linkage_name - .short 325 # DW_AT_name + .short 310 # DW_AT_linkage_name + .short 311 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x169c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1519:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9699 # DW_AT_type - .byte 27 # Abbrev [27] 0x16a8:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9825 # DW_AT_type + .byte 24 # Abbrev [24] 0x1525:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9715 # DW_AT_type - .byte 33 # Abbrev [33] 0x16b4:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x16b6:0x5 DW_TAG_template_type_parameter - .long 7500 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9841 # DW_AT_type + .byte 30 # Abbrev [30] 0x1531:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1533:0x5 DW_TAG_template_type_parameter + .long 7602 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x16bd:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x153a:0x2f DW_TAG_subprogram .byte 109 # DW_AT_low_pc .long .Lfunc_end108-.Lfunc_begin108 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 326 # DW_AT_linkage_name - .short 327 # DW_AT_name + .short 312 # DW_AT_linkage_name + .short 313 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x16cb:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1548:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9732 # DW_AT_type - .byte 27 # Abbrev [27] 0x16d7:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9858 # DW_AT_type + .byte 24 # Abbrev [24] 0x1554:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9748 # DW_AT_type - .byte 33 # Abbrev [33] 0x16e3:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x16e5:0x5 DW_TAG_template_type_parameter - .long 7510 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9874 # DW_AT_type + .byte 30 # Abbrev [30] 0x1560:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1562:0x5 DW_TAG_template_type_parameter + .long 7612 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x16ec:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0x1569:0x2f DW_TAG_subprogram .byte 110 # DW_AT_low_pc .long .Lfunc_end109-.Lfunc_begin109 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 329 # DW_AT_linkage_name - .short 330 # DW_AT_name + .short 315 # DW_AT_linkage_name + .short 316 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x16fa:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x1577:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9765 # DW_AT_type - .byte 27 # Abbrev [27] 0x1706:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9891 # DW_AT_type + .byte 24 # Abbrev [24] 0x1583:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9781 # DW_AT_type - .byte 33 # Abbrev [33] 0x1712:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1714:0x5 DW_TAG_template_type_parameter - .long 7516 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9907 # DW_AT_type + .byte 30 # Abbrev [30] 0x158f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1591:0x5 DW_TAG_template_type_parameter + .long 7618 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x171b:0x5 DW_TAG_pointer_type + .byte 47 # Abbrev [47] 0x1598:0x5 DW_TAG_pointer_type .long 206 # DW_AT_type - .byte 60 # Abbrev [60] 0x1720:0x1f DW_TAG_subprogram + .byte 55 # Abbrev [55] 0x159d:0x1f DW_TAG_subprogram .byte 111 # DW_AT_low_pc .long .Lfunc_end110-.Lfunc_begin110 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 5938 # DW_AT_object_pointer - .short 331 # DW_AT_linkage_name + .long 5551 # DW_AT_object_pointer + .short 317 # DW_AT_linkage_name .long 212 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1732:0xa DW_TAG_formal_parameter + .byte 49 # Abbrev [49] 0x15af:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 9798 # DW_AT_type + .short 486 # DW_AT_name + .long 9924 # DW_AT_type # DW_AT_artificial - .byte 18 # Abbrev [18] 0x173c:0x2 DW_TAG_template_type_parameter + .byte 18 # Abbrev [18] 0x15b9:0x2 DW_TAG_template_type_parameter .byte 20 # DW_AT_name - # DW_AT_default_value .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x173f:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x15bc:0x2f DW_TAG_subprogram .byte 112 # DW_AT_low_pc .long .Lfunc_end111-.Lfunc_begin111 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 332 # DW_AT_linkage_name - .short 333 # DW_AT_name + .short 318 # DW_AT_linkage_name + .short 319 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x174d:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x15ca:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9803 # DW_AT_type - .byte 27 # Abbrev [27] 0x1759:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9929 # DW_AT_type + .byte 24 # Abbrev [24] 0x15d6:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9819 # DW_AT_type - .byte 33 # Abbrev [33] 0x1765:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1767:0x5 DW_TAG_template_type_parameter - .long 7532 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9945 # DW_AT_type + .byte 30 # Abbrev [30] 0x15e2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x15e4:0x5 DW_TAG_template_type_parameter + .long 7634 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x176e:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x15eb:0x2f DW_TAG_subprogram .byte 113 # DW_AT_low_pc .long .Lfunc_end112-.Lfunc_begin112 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 334 # DW_AT_linkage_name - .short 335 # DW_AT_name + .short 320 # DW_AT_linkage_name + .short 321 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x177c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x15f9:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9836 # DW_AT_type - .byte 27 # Abbrev [27] 0x1788:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9962 # DW_AT_type + .byte 24 # Abbrev [24] 0x1605:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9852 # DW_AT_type - .byte 33 # Abbrev [33] 0x1794:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1796:0x5 DW_TAG_template_type_parameter - .long 7558 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 9978 # DW_AT_type + .byte 30 # Abbrev [30] 0x1611:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1613:0x5 DW_TAG_template_type_parameter + .long 7660 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x179d:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x161a:0x2f DW_TAG_subprogram .byte 114 # DW_AT_low_pc .long .Lfunc_end113-.Lfunc_begin113 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 336 # DW_AT_linkage_name - .short 337 # DW_AT_name + .short 322 # DW_AT_linkage_name + .short 323 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x17ab:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1628:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9869 # DW_AT_type - .byte 27 # Abbrev [27] 0x17b7:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 9995 # DW_AT_type + .byte 24 # Abbrev [24] 0x1634:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9885 # DW_AT_type - .byte 33 # Abbrev [33] 0x17c3:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x17c5:0x5 DW_TAG_template_type_parameter - .long 7584 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10011 # DW_AT_type + .byte 30 # Abbrev [30] 0x1640:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1642:0x5 DW_TAG_template_type_parameter + .long 7686 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 61 # Abbrev [61] 0x17cc:0x19 DW_TAG_subprogram + .byte 56 # Abbrev [56] 0x1649:0x19 DW_TAG_subprogram .byte 115 # DW_AT_low_pc .long .Lfunc_end114-.Lfunc_begin114 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 338 # DW_AT_linkage_name - .short 339 # DW_AT_name + .short 324 # DW_AT_linkage_name + .short 325 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 162 # DW_AT_decl_line - .long 7402 # DW_AT_type + .byte 164 # DW_AT_decl_line + .long 7504 # DW_AT_type # DW_AT_external - .byte 15 # Abbrev [15] 0x17de:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x165b:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x17e5:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1662:0x2f DW_TAG_subprogram .byte 116 # DW_AT_low_pc .long .Lfunc_end115-.Lfunc_begin115 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 340 # DW_AT_linkage_name - .short 341 # DW_AT_name + .short 326 # DW_AT_linkage_name + .short 327 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x17f3:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1670:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9902 # DW_AT_type - .byte 27 # Abbrev [27] 0x17ff:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10028 # DW_AT_type + .byte 24 # Abbrev [24] 0x167c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9918 # DW_AT_type - .byte 33 # Abbrev [33] 0x180b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x180d:0x5 DW_TAG_template_type_parameter - .long 7610 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10044 # DW_AT_type + .byte 30 # Abbrev [30] 0x1688:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x168a:0x5 DW_TAG_template_type_parameter + .long 7712 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1814:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1691:0x2f DW_TAG_subprogram .byte 117 # DW_AT_low_pc .long .Lfunc_end116-.Lfunc_begin116 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 342 # DW_AT_linkage_name - .short 343 # DW_AT_name + .short 328 # DW_AT_linkage_name + .short 329 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1822:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x169f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9935 # DW_AT_type - .byte 27 # Abbrev [27] 0x182e:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10061 # DW_AT_type + .byte 24 # Abbrev [24] 0x16ab:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9951 # DW_AT_type - .byte 33 # Abbrev [33] 0x183a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x183c:0x5 DW_TAG_template_type_parameter - .long 7615 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10077 # DW_AT_type + .byte 30 # Abbrev [30] 0x16b7:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x16b9:0x5 DW_TAG_template_type_parameter + .long 7717 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1843:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x16c0:0x2f DW_TAG_subprogram .byte 118 # DW_AT_low_pc .long .Lfunc_end117-.Lfunc_begin117 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 344 # DW_AT_linkage_name - .short 345 # DW_AT_name + .short 330 # DW_AT_linkage_name + .short 331 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1851:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x16ce:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 9968 # DW_AT_type - .byte 27 # Abbrev [27] 0x185d:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10094 # DW_AT_type + .byte 24 # Abbrev [24] 0x16da:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 9984 # DW_AT_type - .byte 33 # Abbrev [33] 0x1869:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x186b:0x5 DW_TAG_template_type_parameter - .long 7637 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10110 # DW_AT_type + .byte 30 # Abbrev [30] 0x16e6:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x16e8:0x5 DW_TAG_template_type_parameter + .long 7739 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1872:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x16ef:0x2f DW_TAG_subprogram .byte 119 # DW_AT_low_pc .long .Lfunc_end118-.Lfunc_begin118 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 346 # DW_AT_linkage_name - .short 347 # DW_AT_name + .short 332 # DW_AT_linkage_name + .short 333 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1880:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x16fd:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10001 # DW_AT_type - .byte 27 # Abbrev [27] 0x188c:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10127 # DW_AT_type + .byte 24 # Abbrev [24] 0x1709:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10017 # DW_AT_type - .byte 33 # Abbrev [33] 0x1898:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x189a:0x5 DW_TAG_template_type_parameter - .long 7643 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10143 # DW_AT_type + .byte 30 # Abbrev [30] 0x1715:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1717:0x5 DW_TAG_template_type_parameter + .long 7745 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x18a1:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x171e:0x2f DW_TAG_subprogram .byte 120 # DW_AT_low_pc .long .Lfunc_end119-.Lfunc_begin119 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 348 # DW_AT_linkage_name - .short 349 # DW_AT_name + .short 334 # DW_AT_linkage_name + .short 335 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x18af:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x172c:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10034 # DW_AT_type - .byte 27 # Abbrev [27] 0x18bb:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10160 # DW_AT_type + .byte 24 # Abbrev [24] 0x1738:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10050 # DW_AT_type - .byte 33 # Abbrev [33] 0x18c7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x18c9:0x5 DW_TAG_template_type_parameter - .long 7649 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10176 # DW_AT_type + .byte 30 # Abbrev [30] 0x1744:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1746:0x5 DW_TAG_template_type_parameter + .long 7751 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x18d0:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x174d:0x2f DW_TAG_subprogram .byte 121 # DW_AT_low_pc .long .Lfunc_end120-.Lfunc_begin120 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 350 # DW_AT_linkage_name - .short 351 # DW_AT_name + .short 336 # DW_AT_linkage_name + .short 337 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x18de:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x175b:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10067 # DW_AT_type - .byte 27 # Abbrev [27] 0x18ea:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10193 # DW_AT_type + .byte 24 # Abbrev [24] 0x1767:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10083 # DW_AT_type - .byte 33 # Abbrev [33] 0x18f6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x18f8:0x5 DW_TAG_template_type_parameter - .long 7659 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10209 # DW_AT_type + .byte 30 # Abbrev [30] 0x1773:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1775:0x5 DW_TAG_template_type_parameter + .long 7761 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x18ff:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x177c:0x2f DW_TAG_subprogram .byte 122 # DW_AT_low_pc .long .Lfunc_end121-.Lfunc_begin121 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 352 # DW_AT_linkage_name - .short 353 # DW_AT_name + .short 338 # DW_AT_linkage_name + .short 339 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x190d:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x178a:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10100 # DW_AT_type - .byte 27 # Abbrev [27] 0x1919:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10226 # DW_AT_type + .byte 24 # Abbrev [24] 0x1796:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10116 # DW_AT_type - .byte 33 # Abbrev [33] 0x1925:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1927:0x5 DW_TAG_template_type_parameter - .long 7676 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10242 # DW_AT_type + .byte 30 # Abbrev [30] 0x17a2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x17a4:0x5 DW_TAG_template_type_parameter + .long 7778 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x192e:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x17ab:0x2f DW_TAG_subprogram .byte 123 # DW_AT_low_pc .long .Lfunc_end122-.Lfunc_begin122 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 354 # DW_AT_linkage_name - .short 355 # DW_AT_name + .short 340 # DW_AT_linkage_name + .short 341 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x193c:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x17b9:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10133 # DW_AT_type - .byte 27 # Abbrev [27] 0x1948:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10259 # DW_AT_type + .byte 24 # Abbrev [24] 0x17c5:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10149 # DW_AT_type - .byte 33 # Abbrev [33] 0x1954:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1956:0x5 DW_TAG_template_type_parameter - .long 7681 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10275 # DW_AT_type + .byte 30 # Abbrev [30] 0x17d1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x17d3:0x5 DW_TAG_template_type_parameter + .long 7783 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x195d:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x17da:0x2f DW_TAG_subprogram .byte 124 # DW_AT_low_pc .long .Lfunc_end123-.Lfunc_begin123 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 356 # DW_AT_linkage_name - .short 357 # DW_AT_name + .short 342 # DW_AT_linkage_name + .short 343 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x196b:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x17e8:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10166 # DW_AT_type - .byte 27 # Abbrev [27] 0x1977:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10292 # DW_AT_type + .byte 24 # Abbrev [24] 0x17f4:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10182 # DW_AT_type - .byte 33 # Abbrev [33] 0x1983:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1985:0x5 DW_TAG_template_type_parameter - .long 7712 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10308 # DW_AT_type + .byte 30 # Abbrev [30] 0x1800:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1802:0x5 DW_TAG_template_type_parameter + .long 7814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x198c:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1809:0x2f DW_TAG_subprogram .byte 125 # DW_AT_low_pc .long .Lfunc_end124-.Lfunc_begin124 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 358 # DW_AT_linkage_name - .short 359 # DW_AT_name + .short 344 # DW_AT_linkage_name + .short 345 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x199a:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1817:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10199 # DW_AT_type - .byte 27 # Abbrev [27] 0x19a6:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10325 # DW_AT_type + .byte 24 # Abbrev [24] 0x1823:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10215 # DW_AT_type - .byte 33 # Abbrev [33] 0x19b2:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x19b4:0x5 DW_TAG_template_type_parameter - .long 7735 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10341 # DW_AT_type + .byte 30 # Abbrev [30] 0x182f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1831:0x5 DW_TAG_template_type_parameter + .long 7837 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x19bb:0x2f DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x1838:0x2f DW_TAG_subprogram .byte 126 # DW_AT_low_pc .long .Lfunc_end125-.Lfunc_begin125 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 360 # DW_AT_linkage_name - .short 361 # DW_AT_name + .short 346 # DW_AT_linkage_name + .short 347 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x19c9:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1846:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10232 # DW_AT_type - .byte 27 # Abbrev [27] 0x19d5:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10358 # DW_AT_type + .byte 24 # Abbrev [24] 0x1852:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10248 # DW_AT_type - .byte 33 # Abbrev [33] 0x19e1:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x19e3:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10374 # DW_AT_type + .byte 30 # Abbrev [30] 0x185e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1860:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x19ea:0x2f DW_TAG_subprogram + .byte 40 # Abbrev [40] 0x1867:0x2f DW_TAG_subprogram .byte 127 # DW_AT_low_pc .long .Lfunc_end126-.Lfunc_begin126 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 362 # DW_AT_linkage_name - .short 363 # DW_AT_name + .short 348 # DW_AT_linkage_name + .short 349 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x19f8:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x1875:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10265 # DW_AT_type - .byte 27 # Abbrev [27] 0x1a04:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10391 # DW_AT_type + .byte 24 # Abbrev [24] 0x1881:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10281 # DW_AT_type - .byte 33 # Abbrev [33] 0x1a10:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1a12:0x5 DW_TAG_template_type_parameter - .long 7747 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10407 # DW_AT_type + .byte 30 # Abbrev [30] 0x188d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x188f:0x5 DW_TAG_template_type_parameter + .long 7849 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x1a19:0x30 DW_TAG_subprogram + .byte 40 # Abbrev [40] 0x1896:0x30 DW_TAG_subprogram .ascii "\200\001" # DW_AT_low_pc .long .Lfunc_end127-.Lfunc_begin127 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 364 # DW_AT_linkage_name - .short 365 # DW_AT_name + .short 350 # DW_AT_linkage_name + .short 351 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x1a28:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x18a5:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10298 # DW_AT_type - .byte 27 # Abbrev [27] 0x1a34:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10424 # DW_AT_type + .byte 24 # Abbrev [24] 0x18b1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10314 # DW_AT_type - .byte 33 # Abbrev [33] 0x1a40:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1a42:0x5 DW_TAG_template_type_parameter - .long 7754 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10440 # DW_AT_type + .byte 30 # Abbrev [30] 0x18bd:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x18bf:0x5 DW_TAG_template_type_parameter + .long 7856 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x1a49:0x30 DW_TAG_subprogram + .byte 40 # Abbrev [40] 0x18c6:0x30 DW_TAG_subprogram .ascii "\201\001" # DW_AT_low_pc .long .Lfunc_end128-.Lfunc_begin128 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 366 # DW_AT_linkage_name - .short 367 # DW_AT_name + .short 352 # DW_AT_linkage_name + .short 353 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x1a58:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x18d5:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10331 # DW_AT_type - .byte 27 # Abbrev [27] 0x1a64:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10457 # DW_AT_type + .byte 24 # Abbrev [24] 0x18e1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10347 # DW_AT_type - .byte 33 # Abbrev [33] 0x1a70:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1a72:0x5 DW_TAG_template_type_parameter - .long 7766 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10473 # DW_AT_type + .byte 30 # Abbrev [30] 0x18ed:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x18ef:0x5 DW_TAG_template_type_parameter + .long 7868 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1a79:0x16 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x18f6:0x16 DW_TAG_subprogram .ascii "\202\001" # DW_AT_low_pc .long .Lfunc_end129-.Lfunc_begin129 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 368 # DW_AT_linkage_name - .short 369 # DW_AT_name + .short 354 # DW_AT_linkage_name + .short 355 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 171 # DW_AT_decl_line + .byte 173 # DW_AT_decl_line # DW_AT_external - .byte 15 # Abbrev [15] 0x1a88:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1905:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1a8f:0x30 DW_TAG_subprogram + .byte 12 # Abbrev [12] 0x190c:0x1e DW_TAG_subprogram .ascii "\203\001" # DW_AT_low_pc .long .Lfunc_end130-.Lfunc_begin130 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 371 # DW_AT_linkage_name - .short 372 # DW_AT_name + .short 358 # DW_AT_linkage_name + .short 359 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 188 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1a9e:0xc DW_TAG_variable - .byte 2 # DW_AT_location - .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 15 # Abbrev [15] 0x191b:0x6 DW_TAG_template_type_parameter + .long 7875 # DW_AT_type + .byte 20 # DW_AT_name + .byte 57 # Abbrev [57] 0x1921:0x8 DW_TAG_template_value_parameter + .long 7875 # DW_AT_type + .short 357 # DW_AT_name + .byte 2 # DW_AT_const_value + .byte 0 # End Of Children Mark + .byte 12 # Abbrev [12] 0x192a:0x1e DW_TAG_subprogram + .ascii "\204\001" # DW_AT_low_pc + .long .Lfunc_end131-.Lfunc_begin131 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 86 + .short 361 # DW_AT_linkage_name + .short 362 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10364 # DW_AT_type - .byte 27 # Abbrev [27] 0x1aaa:0xc DW_TAG_variable - .byte 2 # DW_AT_location - .byte 145 - .byte 112 - .short 387 # DW_AT_name + .byte 188 # DW_AT_decl_line + # DW_AT_external + .byte 15 # Abbrev [15] 0x1939:0x6 DW_TAG_template_type_parameter + .long 7881 # DW_AT_type + .byte 20 # DW_AT_name + .byte 58 # Abbrev [58] 0x193f:0x8 DW_TAG_template_value_parameter + .long 7886 # DW_AT_type + .short 357 # DW_AT_name + .byte 2 # DW_AT_const_value + .byte 0 # End Of Children Mark + .byte 12 # Abbrev [12] 0x1948:0x26 DW_TAG_subprogram + .ascii "\205\001" # DW_AT_low_pc + .long .Lfunc_end132-.Lfunc_begin132 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 86 + .short 364 # DW_AT_linkage_name + .short 365 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10380 # DW_AT_type - .byte 33 # Abbrev [33] 0x1ab6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1ab8:0x5 DW_TAG_template_type_parameter - .long 7773 # DW_AT_type + .byte 188 # DW_AT_decl_line + # DW_AT_external + .byte 15 # Abbrev [15] 0x1957:0x6 DW_TAG_template_type_parameter + .long 7892 # DW_AT_type + .byte 20 # DW_AT_name + .byte 59 # Abbrev [59] 0x195d:0x10 DW_TAG_template_value_parameter + .long 7892 # DW_AT_type + .short 357 # DW_AT_name + .byte 8 # DW_AT_const_value + .byte 2 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 .byte 0 # End Of Children Mark + .byte 12 # Abbrev [12] 0x196e:0x26 DW_TAG_subprogram + .ascii "\206\001" # DW_AT_low_pc + .long .Lfunc_end133-.Lfunc_begin133 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 86 + .short 367 # DW_AT_linkage_name + .short 368 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 188 # DW_AT_decl_line + # DW_AT_external + .byte 15 # Abbrev [15] 0x197d:0x6 DW_TAG_template_type_parameter + .long 7898 # DW_AT_type + .byte 20 # DW_AT_name + .byte 59 # Abbrev [59] 0x1983:0x10 DW_TAG_template_value_parameter + .long 7903 # DW_AT_type + .short 357 # DW_AT_name + .byte 8 # DW_AT_const_value + .byte 2 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1abf:0x30 DW_TAG_subprogram - .ascii "\204\001" # DW_AT_low_pc - .long .Lfunc_end131-.Lfunc_begin131 # DW_AT_high_pc + .byte 12 # Abbrev [12] 0x1994:0x30 DW_TAG_subprogram + .ascii "\207\001" # DW_AT_low_pc + .long .Lfunc_end134-.Lfunc_begin134 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 374 # DW_AT_linkage_name - .short 375 # DW_AT_name + .short 370 # DW_AT_linkage_name + .short 371 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1ace:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x19a3:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10397 # DW_AT_type - .byte 27 # Abbrev [27] 0x1ada:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10490 # DW_AT_type + .byte 24 # Abbrev [24] 0x19af:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10413 # DW_AT_type - .byte 33 # Abbrev [33] 0x1ae6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1ae8:0x5 DW_TAG_template_type_parameter - .long 7778 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10506 # DW_AT_type + .byte 30 # Abbrev [30] 0x19bb:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x19bd:0x5 DW_TAG_template_type_parameter + .long 7909 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1aef:0x30 DW_TAG_subprogram - .ascii "\205\001" # DW_AT_low_pc - .long .Lfunc_end132-.Lfunc_begin132 # DW_AT_high_pc + .byte 12 # Abbrev [12] 0x19c4:0x30 DW_TAG_subprogram + .ascii "\210\001" # DW_AT_low_pc + .long .Lfunc_end135-.Lfunc_begin135 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 377 # DW_AT_linkage_name - .short 378 # DW_AT_name + .short 372 # DW_AT_linkage_name + .short 373 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1afe:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x19d3:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10430 # DW_AT_type - .byte 27 # Abbrev [27] 0x1b0a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10523 # DW_AT_type + .byte 24 # Abbrev [24] 0x19df:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10446 # DW_AT_type - .byte 33 # Abbrev [33] 0x1b16:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1b18:0x5 DW_TAG_template_type_parameter - .long 7788 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10539 # DW_AT_type + .byte 30 # Abbrev [30] 0x19eb:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x19ed:0x5 DW_TAG_template_type_parameter + .long 7931 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1b1f:0x30 DW_TAG_subprogram - .ascii "\206\001" # DW_AT_low_pc - .long .Lfunc_end133-.Lfunc_begin133 # DW_AT_high_pc + .byte 12 # Abbrev [12] 0x19f4:0x30 DW_TAG_subprogram + .ascii "\211\001" # DW_AT_low_pc + .long .Lfunc_end136-.Lfunc_begin136 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 379 # DW_AT_linkage_name - .short 380 # DW_AT_name + .short 374 # DW_AT_linkage_name + .short 375 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1b2e:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1a03:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10463 # DW_AT_type - .byte 27 # Abbrev [27] 0x1b3a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10556 # DW_AT_type + .byte 24 # Abbrev [24] 0x1a0f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10479 # DW_AT_type - .byte 33 # Abbrev [33] 0x1b46:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1b48:0x5 DW_TAG_template_type_parameter - .long 7810 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10572 # DW_AT_type + .byte 30 # Abbrev [30] 0x1a1b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1a1d:0x5 DW_TAG_template_type_parameter + .long 7940 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1b4f:0x30 DW_TAG_subprogram - .ascii "\207\001" # DW_AT_low_pc - .long .Lfunc_end134-.Lfunc_begin134 # DW_AT_high_pc + .byte 12 # Abbrev [12] 0x1a24:0x30 DW_TAG_subprogram + .ascii "\212\001" # DW_AT_low_pc + .long .Lfunc_end137-.Lfunc_begin137 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 381 # DW_AT_linkage_name - .short 382 # DW_AT_name + .short 376 # DW_AT_linkage_name + .short 377 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1b5e:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1a33:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10496 # DW_AT_type - .byte 27 # Abbrev [27] 0x1b6a:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10589 # DW_AT_type + .byte 24 # Abbrev [24] 0x1a3f:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10512 # DW_AT_type - .byte 33 # Abbrev [33] 0x1b76:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1b78:0x5 DW_TAG_template_type_parameter - .long 7819 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10605 # DW_AT_type + .byte 30 # Abbrev [30] 0x1a4b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1a4d:0x5 DW_TAG_template_type_parameter + .long 7942 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 14 # Abbrev [14] 0x1b7f:0x12 DW_TAG_structure_type + .byte 40 # Abbrev [40] 0x1a54:0x16 DW_TAG_subprogram + .ascii "\213\001" # DW_AT_low_pc + .long .Lfunc_end138-.Lfunc_begin138 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 86 + .short 378 # DW_AT_linkage_name + .short 379 # DW_AT_name + .byte 0 # DW_AT_decl_file + .byte 185 # DW_AT_decl_line + .byte 35 # Abbrev [35] 0x1a63:0x6 DW_TAG_template_value_parameter + .long 133 # DW_AT_type + .byte 0 # DW_AT_const_value + .byte 0 # End Of Children Mark + .byte 14 # Abbrev [14] 0x1a6a:0x12 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 133 # DW_AT_name + .byte 85 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 153 # DW_AT_decl_line - .byte 51 # Abbrev [51] 0x1b85:0xb DW_TAG_subprogram - .byte 131 # DW_AT_linkage_name - .byte 132 # DW_AT_name + .byte 155 # DW_AT_decl_line + .byte 17 # Abbrev [17] 0x1a70:0xb DW_TAG_subprogram + .byte 83 # DW_AT_linkage_name + .byte 84 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 154 # DW_AT_decl_line + .byte 156 # DW_AT_decl_line # DW_AT_declaration # DW_AT_external - .byte 19 # Abbrev [19] 0x1b8a:0x5 DW_TAG_formal_parameter - .long 7057 # DW_AT_type + .byte 19 # Abbrev [19] 0x1a75:0x5 DW_TAG_formal_parameter + .long 6780 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1b91:0x5 DW_TAG_pointer_type - .long 7039 # DW_AT_type - .byte 62 # Abbrev [62] 0x1b96:0x21 DW_TAG_subprogram - .ascii "\210\001" # DW_AT_low_pc - .long .Lfunc_end135-.Lfunc_begin135 # DW_AT_high_pc + .byte 47 # Abbrev [47] 0x1a7c:0x5 DW_TAG_pointer_type + .long 6762 # DW_AT_type + .byte 60 # Abbrev [60] 0x1a81:0x21 DW_TAG_subprogram + .ascii "\214\001" # DW_AT_low_pc + .long .Lfunc_end139-.Lfunc_begin139 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .long 7081 # DW_AT_object_pointer - .short 329 # DW_AT_decl_line - .long 7045 # DW_AT_specification - .byte 57 # Abbrev [57] 0x1ba9:0xa DW_TAG_formal_parameter + .long 6804 # DW_AT_object_pointer + .short 342 # DW_AT_decl_line + .long 6768 # DW_AT_specification + .byte 49 # Abbrev [49] 0x1a94:0xa DW_TAG_formal_parameter .byte 2 # DW_AT_location .byte 145 .byte 120 - .short 487 # DW_AT_name - .long 10529 # DW_AT_type + .short 486 # DW_AT_name + .long 10622 # DW_AT_type # DW_AT_artificial - .byte 32 # Abbrev [32] 0x1bb3:0x3 DW_TAG_structure_type - .short 295 # DW_AT_name + .byte 29 # Abbrev [29] 0x1a9e:0x3 DW_TAG_structure_type + .short 281 # DW_AT_name # DW_AT_declaration .byte 0 # End Of Children Mark - .byte 45 # Abbrev [45] 0x1bb7:0x30 DW_TAG_subprogram - .ascii "\211\001" # DW_AT_low_pc - .long .Lfunc_end136-.Lfunc_begin136 # DW_AT_high_pc + .byte 40 # Abbrev [40] 0x1aa2:0x30 DW_TAG_subprogram + .ascii "\215\001" # DW_AT_low_pc + .long .Lfunc_end140-.Lfunc_begin140 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 383 # DW_AT_linkage_name - .short 297 # DW_AT_name + .short 380 # DW_AT_linkage_name + .short 283 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line - .byte 27 # Abbrev [27] 0x1bc6:0xc DW_TAG_variable + .byte 35 # DW_AT_decl_line + .byte 24 # Abbrev [24] 0x1ab1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10534 # DW_AT_type - .byte 27 # Abbrev [27] 0x1bd2:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10627 # DW_AT_type + .byte 24 # Abbrev [24] 0x1abd:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10550 # DW_AT_type - .byte 33 # Abbrev [33] 0x1bde:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1be0:0x5 DW_TAG_template_type_parameter - .long 7091 # DW_AT_type + .byte 37 # DW_AT_decl_line + .long 10643 # DW_AT_type + .byte 30 # Abbrev [30] 0x1ac9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1acb:0x5 DW_TAG_template_type_parameter + .long 6814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 12 # Abbrev [12] 0x1be7:0x30 DW_TAG_subprogram - .ascii "\212\001" # DW_AT_low_pc - .long .Lfunc_end137-.Lfunc_begin137 # DW_AT_high_pc + .byte 12 # Abbrev [12] 0x1ad2:0x30 DW_TAG_subprogram + .ascii "\216\001" # DW_AT_low_pc + .long .Lfunc_end141-.Lfunc_begin141 # DW_AT_high_pc .byte 1 # DW_AT_frame_base .byte 86 - .short 384 # DW_AT_linkage_name - .short 385 # DW_AT_name + .short 381 # DW_AT_linkage_name + .short 382 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 33 # DW_AT_decl_line + .byte 35 # DW_AT_decl_line # DW_AT_external - .byte 27 # Abbrev [27] 0x1bf6:0xc DW_TAG_variable + .byte 24 # Abbrev [24] 0x1ae1:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 - .byte 120 - .short 390 # DW_AT_name + .byte 127 + .short 389 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 34 # DW_AT_decl_line - .long 10567 # DW_AT_type - .byte 27 # Abbrev [27] 0x1c02:0xc DW_TAG_variable + .byte 36 # DW_AT_decl_line + .long 10660 # DW_AT_type + .byte 24 # Abbrev [24] 0x1aed:0xc DW_TAG_variable .byte 2 # DW_AT_location .byte 145 .byte 112 - .short 387 # DW_AT_name + .short 386 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 35 # DW_AT_decl_line - .long 10583 # DW_AT_type - .byte 33 # Abbrev [33] 0x1c0e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 37 # DW_AT_decl_line + .long 10676 # DW_AT_type + .byte 30 # Abbrev [30] 0x1af9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1afb:0x5 DW_TAG_template_type_parameter + .long 7947 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark + .byte 8 # Abbrev [8] 0x1b02:0x75 DW_TAG_namespace .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1c10:0x5 DW_TAG_template_type_parameter - .long 7821 # DW_AT_type + .byte 61 # Abbrev [61] 0x1b04:0x2b DW_TAG_subprogram + .ascii "\217\001" # DW_AT_low_pc + .long .Lfunc_end142-.Lfunc_begin142 # DW_AT_high_pc + .byte 1 # DW_AT_frame_base + .byte 86 + .short 383 # DW_AT_linkage_name + .short 384 # DW_AT_name + .byte 0 # DW_AT_decl_file + .short 360 # DW_AT_decl_line + # DW_AT_external + .byte 25 # Abbrev [25] 0x1b14:0xd DW_TAG_variable + .byte 2 # DW_AT_location + .byte 145 + .byte 127 + .short 389 # DW_AT_name + .byte 0 # DW_AT_decl_file + .short 361 # DW_AT_decl_line + .long 6959 # DW_AT_type + .byte 25 # Abbrev [25] 0x1b21:0xd DW_TAG_variable + .byte 2 # DW_AT_location + .byte 145 + .byte 126 + .short 386 # DW_AT_name + .byte 0 # DW_AT_decl_file + .short 362 # DW_AT_decl_line + .long 7002 # DW_AT_type .byte 0 # End Of Children Mark + .byte 62 # Abbrev [62] 0x1b2f:0x13 DW_TAG_structure_type + .byte 5 # DW_AT_calling_convention + .byte 240 # DW_AT_name + .byte 1 # DW_AT_byte_size + .byte 0 # DW_AT_decl_file + .short 357 # DW_AT_decl_line + .byte 63 # Abbrev [63] 0x1b36:0xb DW_TAG_member + .short 389 # DW_AT_name + .long 6978 # DW_AT_type + .byte 0 # DW_AT_decl_file + .short 358 # DW_AT_decl_line + .byte 0 # DW_AT_data_member_location .byte 0 # End Of Children Mark - .byte 3 # Abbrev [3] 0x1c17:0x4 DW_TAG_base_type - .byte 143 # DW_AT_name + .byte 64 # Abbrev [64] 0x1b42:0x13 DW_TAG_structure_type + .byte 5 # DW_AT_calling_convention + .short 556 # DW_AT_name + .byte 1 # DW_AT_byte_size + .byte 0 # DW_AT_decl_file + .short 355 # DW_AT_decl_line + .byte 65 # Abbrev [65] 0x1b4a:0x5 DW_TAG_template_type_parameter + .long 6998 # DW_AT_type + # DW_AT_default_value + .byte 65 # Abbrev [65] 0x1b4f:0x5 DW_TAG_template_type_parameter + .long 7002 # DW_AT_type + # DW_AT_default_value + .byte 0 # End Of Children Mark + .byte 4 # Abbrev [4] 0x1b55:0x5 DW_TAG_namespace + .byte 29 # Abbrev [29] 0x1b56:0x3 DW_TAG_structure_type + .short 553 # DW_AT_name + # DW_AT_declaration + .byte 0 # End Of Children Mark + .byte 66 # Abbrev [66] 0x1b5a:0xe DW_TAG_class_type + .byte 5 # DW_AT_calling_convention + .short 555 # DW_AT_name + .byte 1 # DW_AT_byte_size + .byte 0 # DW_AT_decl_file + .short 353 # DW_AT_decl_line + .byte 65 # Abbrev [65] 0x1b62:0x5 DW_TAG_template_type_parameter + .long 7016 # DW_AT_type + # DW_AT_default_value + .byte 0 # End Of Children Mark + .byte 67 # Abbrev [67] 0x1b68:0xe DW_TAG_structure_type + .short 554 # DW_AT_name + # DW_AT_declaration + .byte 68 # Abbrev [68] 0x1b6b:0xa DW_TAG_template_value_parameter + .long 7504 # DW_AT_type + # DW_AT_default_value + .byte 4 # DW_AT_location + .byte 161 + .ascii "\220\001" + .byte 159 + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark + .byte 69 # Abbrev [69] 0x1b77:0x9 DW_TAG_typedef + .long 7040 # DW_AT_type + .byte 88 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 268 # DW_AT_decl_line + .byte 3 # Abbrev [3] 0x1b80:0x4 DW_TAG_base_type + .byte 87 # DW_AT_name + .byte 6 # DW_AT_encoding + .byte 1 # DW_AT_byte_size + .byte 52 # Abbrev [52] 0x1b84:0x8 DW_TAG_typedef + .long 7052 # DW_AT_type + .byte 90 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 245 # DW_AT_decl_line + .byte 3 # Abbrev [3] 0x1b8c:0x4 DW_TAG_base_type + .byte 89 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 2 # DW_AT_byte_size + .byte 52 # Abbrev [52] 0x1b90:0x8 DW_TAG_typedef + .long 54 # DW_AT_type + .byte 91 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 197 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1b98:0x8 DW_TAG_typedef + .long 7072 # DW_AT_type + .byte 93 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 100 # DW_AT_decl_line + .byte 3 # Abbrev [3] 0x1ba0:0x4 DW_TAG_base_type + .byte 92 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 8 # DW_AT_byte_size + .byte 69 # Abbrev [69] 0x1ba4:0x9 DW_TAG_typedef + .long 178 # DW_AT_type + .byte 94 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 270 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1bad:0x8 DW_TAG_typedef + .long 7093 # DW_AT_type + .byte 96 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 247 # DW_AT_decl_line + .byte 3 # Abbrev [3] 0x1bb5:0x4 DW_TAG_base_type + .byte 95 # DW_AT_name + .byte 7 # DW_AT_encoding + .byte 2 # DW_AT_byte_size + .byte 52 # Abbrev [52] 0x1bb9:0x8 DW_TAG_typedef + .long 75 # DW_AT_type + .byte 97 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 202 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1bc1:0x8 DW_TAG_typedef + .long 4793 # DW_AT_type + .byte 98 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 102 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1bc9:0x9 DW_TAG_typedef + .long 7031 # DW_AT_type + .byte 99 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 278 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1bd2:0x9 DW_TAG_typedef + .long 7044 # DW_AT_type + .byte 100 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 259 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1bdb:0x8 DW_TAG_typedef + .long 7056 # DW_AT_type + .byte 101 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 220 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1be3:0x8 DW_TAG_typedef + .long 7064 # DW_AT_type + .byte 102 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 122 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1beb:0x9 DW_TAG_typedef + .long 7076 # DW_AT_type + .byte 103 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 279 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1bf4:0x9 DW_TAG_typedef + .long 7085 # DW_AT_type + .byte 104 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 260 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1bfd:0x8 DW_TAG_typedef + .long 7097 # DW_AT_type + .byte 105 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 221 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c05:0x8 DW_TAG_typedef + .long 7105 # DW_AT_type + .byte 106 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 123 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c0d:0x9 DW_TAG_typedef + .long 7031 # DW_AT_type + .byte 107 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 280 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c16:0x9 DW_TAG_typedef + .long 7044 # DW_AT_type + .byte 108 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 261 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c1f:0x8 DW_TAG_typedef + .long 7056 # DW_AT_type + .byte 109 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 222 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c27:0x8 DW_TAG_typedef + .long 7064 # DW_AT_type + .byte 110 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 124 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c2f:0x9 DW_TAG_typedef + .long 7076 # DW_AT_type + .byte 111 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 281 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c38:0x9 DW_TAG_typedef + .long 7085 # DW_AT_type + .byte 112 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 262 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c41:0x8 DW_TAG_typedef + .long 7097 # DW_AT_type + .byte 113 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 223 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c49:0x8 DW_TAG_typedef + .long 7105 # DW_AT_type + .byte 114 # DW_AT_name + .byte 2 # DW_AT_decl_file + .byte 125 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c51:0x9 DW_TAG_typedef + .long 7072 # DW_AT_type + .byte 115 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 295 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c5a:0x9 DW_TAG_typedef + .long 4793 # DW_AT_type + .byte 116 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 302 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c63:0x9 DW_TAG_typedef + .long 7072 # DW_AT_type + .byte 117 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 308 # DW_AT_decl_line + .byte 69 # Abbrev [69] 0x1c6c:0x9 DW_TAG_typedef + .long 4793 # DW_AT_type + .byte 118 # DW_AT_name + .byte 2 # DW_AT_decl_file + .short 309 # DW_AT_decl_line + .byte 52 # Abbrev [52] 0x1c75:0x8 DW_TAG_typedef + .long 7293 # DW_AT_type + .byte 119 # DW_AT_name + .byte 4 # DW_AT_decl_file + .byte 24 # DW_AT_decl_line + .byte 70 # Abbrev [70] 0x1c7d:0x1 DW_TAG_structure_type + # DW_AT_declaration + .byte 3 # Abbrev [3] 0x1c7e:0x4 DW_TAG_base_type + .byte 129 # DW_AT_name .byte 4 # DW_AT_encoding .byte 8 # DW_AT_byte_size - .byte 3 # Abbrev [3] 0x1c1b:0x4 DW_TAG_base_type - .byte 152 # DW_AT_name + .byte 3 # Abbrev [3] 0x1c82:0x4 DW_TAG_base_type + .byte 138 # DW_AT_name .byte 7 # DW_AT_encoding .byte 8 # DW_AT_byte_size - .byte 3 # Abbrev [3] 0x1c1f:0x4 DW_TAG_base_type - .byte 155 # DW_AT_name + .byte 3 # Abbrev [3] 0x1c86:0x4 DW_TAG_base_type + .byte 141 # DW_AT_name .byte 5 # DW_AT_encoding .byte 8 # DW_AT_byte_size - .byte 7 # Abbrev [7] 0x1c23:0x2 DW_TAG_structure_type - .byte 158 # DW_AT_name + .byte 7 # Abbrev [7] 0x1c8a:0x2 DW_TAG_structure_type + .byte 144 # DW_AT_name # DW_AT_declaration - .byte 55 # Abbrev [55] 0x1c25:0x5 DW_TAG_pointer_type + .byte 47 # Abbrev [47] 0x1c8c:0x5 DW_TAG_pointer_type .long 170 # DW_AT_type - .byte 14 # Abbrev [14] 0x1c2a:0xf DW_TAG_structure_type + .byte 14 # Abbrev [14] 0x1c91:0xf DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 168 # DW_AT_name + .byte 154 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1c30:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1c32:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1c97:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1c99:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1c39:0x5 DW_TAG_pointer_type + .byte 47 # Abbrev [47] 0x1ca0:0x5 DW_TAG_pointer_type .long 54 # DW_AT_type - .byte 63 # Abbrev [63] 0x1c3e:0x5 DW_TAG_reference_type + .byte 71 # Abbrev [71] 0x1ca5:0x5 DW_TAG_reference_type .long 54 # DW_AT_type - .byte 64 # Abbrev [64] 0x1c43:0x5 DW_TAG_rvalue_reference_type + .byte 72 # Abbrev [72] 0x1caa:0x5 DW_TAG_rvalue_reference_type .long 54 # DW_AT_type - .byte 65 # Abbrev [65] 0x1c48:0x5 DW_TAG_const_type + .byte 73 # Abbrev [73] 0x1caf:0x5 DW_TAG_const_type .long 54 # DW_AT_type - .byte 66 # Abbrev [66] 0x1c4d:0xc DW_TAG_array_type + .byte 74 # Abbrev [74] 0x1cb4:0xc DW_TAG_array_type .long 54 # DW_AT_type - .byte 67 # Abbrev [67] 0x1c52:0x6 DW_TAG_subrange_type - .long 7257 # DW_AT_type + .byte 75 # Abbrev [75] 0x1cb9:0x6 DW_TAG_subrange_type + .long 7360 # DW_AT_type .byte 3 # DW_AT_count .byte 0 # End Of Children Mark - .byte 68 # Abbrev [68] 0x1c59:0x4 DW_TAG_base_type - .byte 181 # DW_AT_name + .byte 76 # Abbrev [76] 0x1cc0:0x4 DW_TAG_base_type + .byte 167 # DW_AT_name .byte 8 # DW_AT_byte_size .byte 7 # DW_AT_encoding - .byte 14 # Abbrev [14] 0x1c5d:0x9 DW_TAG_structure_type + .byte 14 # Abbrev [14] 0x1cc4:0x9 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 186 # DW_AT_name + .byte 172 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 50 # DW_AT_decl_line - .byte 7 # Abbrev [7] 0x1c63:0x2 DW_TAG_structure_type - .byte 187 # DW_AT_name + .byte 52 # DW_AT_decl_line + .byte 7 # Abbrev [7] 0x1cca:0x2 DW_TAG_structure_type + .byte 173 # DW_AT_name # DW_AT_declaration .byte 0 # End Of Children Mark - .byte 3 # Abbrev [3] 0x1c66:0x4 DW_TAG_base_type - .byte 225 # DW_AT_name + .byte 3 # Abbrev [3] 0x1ccd:0x4 DW_TAG_base_type + .byte 211 # DW_AT_name .byte 6 # DW_AT_encoding .byte 1 # DW_AT_byte_size - .byte 3 # Abbrev [3] 0x1c6a:0x4 DW_TAG_base_type - .byte 228 # DW_AT_name + .byte 3 # Abbrev [3] 0x1cd1:0x4 DW_TAG_base_type + .byte 214 # DW_AT_name .byte 5 # DW_AT_encoding .byte 16 # DW_AT_byte_size - .byte 69 # Abbrev [69] 0x1c6e:0x10 DW_TAG_structure_type - .byte 235 # DW_AT_name + .byte 77 # Abbrev [77] 0x1cd5:0x10 DW_TAG_structure_type + .byte 221 # DW_AT_name # DW_AT_declaration - .byte 15 # Abbrev [15] 0x1c70:0x6 DW_TAG_template_type_parameter + .byte 15 # Abbrev [15] 0x1cd7:0x6 DW_TAG_template_type_parameter .long 182 # DW_AT_type .byte 20 # DW_AT_name - .byte 16 # Abbrev [16] 0x1c76:0x7 DW_TAG_template_value_parameter + .byte 16 # Abbrev [16] 0x1cdd:0x7 DW_TAG_template_value_parameter .long 202 # DW_AT_type .byte 22 # DW_AT_name # DW_AT_default_value .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 69 # Abbrev [69] 0x1c7e:0x10 DW_TAG_structure_type - .byte 241 # DW_AT_name + .byte 77 # Abbrev [77] 0x1ce5:0x10 DW_TAG_structure_type + .byte 227 # DW_AT_name # DW_AT_declaration - .byte 15 # Abbrev [15] 0x1c80:0x6 DW_TAG_template_type_parameter - .long 7310 # DW_AT_type + .byte 15 # Abbrev [15] 0x1ce7:0x6 DW_TAG_template_type_parameter + .long 7413 # DW_AT_type .byte 20 # DW_AT_name - .byte 16 # Abbrev [16] 0x1c86:0x7 DW_TAG_template_value_parameter + .byte 16 # Abbrev [16] 0x1ced:0x7 DW_TAG_template_value_parameter .long 202 # DW_AT_type .byte 22 # DW_AT_name # DW_AT_default_value .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 14 # Abbrev [14] 0x1c8e:0x14 DW_TAG_structure_type + .byte 14 # Abbrev [14] 0x1cf5:0x14 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .byte 240 # DW_AT_name + .byte 226 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 47 # DW_AT_decl_line - .byte 15 # Abbrev [15] 0x1c94:0x6 DW_TAG_template_type_parameter - .long 966 # DW_AT_type + .byte 49 # DW_AT_decl_line + .byte 15 # Abbrev [15] 0x1cfb:0x6 DW_TAG_template_type_parameter + .long 371 # DW_AT_type .byte 20 # DW_AT_name - .byte 16 # Abbrev [16] 0x1c9a:0x7 DW_TAG_template_value_parameter + .byte 16 # Abbrev [16] 0x1d01:0x7 DW_TAG_template_value_parameter .long 202 # DW_AT_type .byte 22 # DW_AT_name # DW_AT_default_value .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 70 # Abbrev [70] 0x1ca2:0xb DW_TAG_subroutine_type + .byte 78 # Abbrev [78] 0x1d09:0xb DW_TAG_subroutine_type .long 54 # DW_AT_type - .byte 52 # Abbrev [52] 0x1ca7:0x5 DW_TAG_formal_parameter - .long 4531 # DW_AT_type + .byte 45 # Abbrev [45] 0x1d0e:0x5 DW_TAG_formal_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark - .byte 71 # Abbrev [71] 0x1cad:0x3 DW_TAG_subroutine_type - .byte 72 # Abbrev [72] 0x1cae:0x1 DW_TAG_unspecified_parameters + .byte 79 # Abbrev [79] 0x1d14:0x3 DW_TAG_subroutine_type + .byte 80 # Abbrev [80] 0x1d15:0x1 DW_TAG_unspecified_parameters .byte 0 # End Of Children Mark - .byte 71 # Abbrev [71] 0x1cb0:0x8 DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1cb1:0x5 DW_TAG_formal_parameter + .byte 79 # Abbrev [79] 0x1d17:0x8 DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1d18:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type - .byte 72 # Abbrev [72] 0x1cb6:0x1 DW_TAG_unspecified_parameters - .byte 0 # End Of Children Mark - .byte 63 # Abbrev [63] 0x1cb8:0x5 DW_TAG_reference_type - .long 7240 # DW_AT_type - .byte 63 # Abbrev [63] 0x1cbd:0x5 DW_TAG_reference_type - .long 7362 # DW_AT_type - .byte 55 # Abbrev [55] 0x1cc2:0x5 DW_TAG_pointer_type - .long 7240 # DW_AT_type - .byte 73 # Abbrev [73] 0x1cc7:0x3 DW_TAG_unspecified_type - .short 257 # DW_AT_name - .byte 55 # Abbrev [55] 0x1cca:0x5 DW_TAG_pointer_type - .long 505 # DW_AT_type - .byte 55 # Abbrev [55] 0x1ccf:0x5 DW_TAG_pointer_type - .long 7203 # DW_AT_type - .byte 65 # Abbrev [65] 0x1cd4:0x5 DW_TAG_const_type - .long 5183 # DW_AT_type - .byte 55 # Abbrev [55] 0x1cd9:0x5 DW_TAG_pointer_type - .long 7390 # DW_AT_type - .byte 65 # Abbrev [65] 0x1cde:0x5 DW_TAG_const_type - .long 7395 # DW_AT_type - .byte 55 # Abbrev [55] 0x1ce3:0x5 DW_TAG_pointer_type - .long 7400 # DW_AT_type - .byte 74 # Abbrev [74] 0x1ce8:0x1 DW_TAG_const_type - .byte 75 # Abbrev [75] 0x1ce9:0x1 DW_TAG_subroutine_type - .byte 55 # Abbrev [55] 0x1cea:0x5 DW_TAG_pointer_type - .long 7401 # DW_AT_type - .byte 55 # Abbrev [55] 0x1cef:0x5 DW_TAG_pointer_type - .long 966 # DW_AT_type - .byte 55 # Abbrev [55] 0x1cf4:0x5 DW_TAG_pointer_type - .long 971 # DW_AT_type - .byte 55 # Abbrev [55] 0x1cf9:0x5 DW_TAG_pointer_type - .long 7422 # DW_AT_type - .byte 76 # Abbrev [76] 0x1cfe:0x10 DW_TAG_structure_type + .byte 80 # Abbrev [80] 0x1d1d:0x1 DW_TAG_unspecified_parameters + .byte 0 # End Of Children Mark + .byte 71 # Abbrev [71] 0x1d1f:0x5 DW_TAG_reference_type + .long 7343 # DW_AT_type + .byte 71 # Abbrev [71] 0x1d24:0x5 DW_TAG_reference_type + .long 7465 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d29:0x5 DW_TAG_pointer_type + .long 7343 # DW_AT_type + .byte 81 # Abbrev [81] 0x1d2e:0x2 DW_TAG_unspecified_type + .byte 243 # DW_AT_name + .byte 47 # Abbrev [47] 0x1d30:0x5 DW_TAG_pointer_type + .long 7072 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d35:0x5 DW_TAG_pointer_type + .long 7306 # DW_AT_type + .byte 73 # Abbrev [73] 0x1d3a:0x5 DW_TAG_const_type + .long 4575 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d3f:0x5 DW_TAG_pointer_type + .long 7492 # DW_AT_type + .byte 73 # Abbrev [73] 0x1d44:0x5 DW_TAG_const_type + .long 7497 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d49:0x5 DW_TAG_pointer_type + .long 7502 # DW_AT_type + .byte 82 # Abbrev [82] 0x1d4e:0x1 DW_TAG_const_type + .byte 83 # Abbrev [83] 0x1d4f:0x1 DW_TAG_subroutine_type + .byte 47 # Abbrev [47] 0x1d50:0x5 DW_TAG_pointer_type + .long 7503 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d55:0x5 DW_TAG_pointer_type + .long 371 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d5a:0x5 DW_TAG_pointer_type + .long 376 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d5f:0x5 DW_TAG_pointer_type + .long 7524 # DW_AT_type + .byte 84 # Abbrev [84] 0x1d64:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 290 # DW_AT_name + .short 276 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1d05:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1d07:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type - .byte 0 # End Of Children Mark - .byte 0 # End Of Children Mark - .byte 66 # Abbrev [66] 0x1d0e:0xb DW_TAG_array_type - .long 7225 # DW_AT_type - .byte 77 # Abbrev [77] 0x1d13:0x5 DW_TAG_subrange_type - .long 7257 # DW_AT_type - .byte 0 # End Of Children Mark - .byte 63 # Abbrev [63] 0x1d19:0x5 DW_TAG_reference_type - .long 7245 # DW_AT_type - .byte 55 # Abbrev [55] 0x1d1e:0x5 DW_TAG_pointer_type - .long 7245 # DW_AT_type - .byte 55 # Abbrev [55] 0x1d23:0x5 DW_TAG_pointer_type - .long 7367 # DW_AT_type - .byte 76 # Abbrev [76] 0x1d28:0xe DW_TAG_structure_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1d6b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1d6d:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 0 # End Of Children Mark + .byte 74 # Abbrev [74] 0x1d74:0xb DW_TAG_array_type + .long 7328 # DW_AT_type + .byte 85 # Abbrev [85] 0x1d79:0x5 DW_TAG_subrange_type + .long 7360 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 71 # Abbrev [71] 0x1d7f:0x5 DW_TAG_reference_type + .long 7348 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d84:0x5 DW_TAG_pointer_type + .long 7348 # DW_AT_type + .byte 47 # Abbrev [47] 0x1d89:0x5 DW_TAG_pointer_type + .long 7470 # DW_AT_type + .byte 84 # Abbrev [84] 0x1d8e:0xe DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 312 # DW_AT_name + .short 298 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 151 # DW_AT_decl_line - .byte 15 # Abbrev [15] 0x1d2f:0x6 DW_TAG_template_type_parameter + .byte 153 # DW_AT_decl_line + .byte 15 # Abbrev [15] 0x1d95:0x6 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 20 # DW_AT_name .byte 0 # End Of Children Mark - .byte 78 # Abbrev [78] 0x1d36:0x5 DW_TAG_atomic_type + .byte 86 # Abbrev [86] 0x1d9c:0x5 DW_TAG_atomic_type .long 54 # DW_AT_type - .byte 79 # Abbrev [79] 0x1d3b:0x5 DW_TAG_volatile_type - .long 7270 # DW_AT_type - .byte 80 # Abbrev [80] 0x1d40:0xc DW_TAG_array_type + .byte 87 # Abbrev [87] 0x1da1:0x5 DW_TAG_volatile_type + .long 7373 # DW_AT_type + .byte 88 # Abbrev [88] 0x1da6:0xc DW_TAG_array_type # DW_AT_GNU_vector .long 54 # DW_AT_type - .byte 67 # Abbrev [67] 0x1d45:0x6 DW_TAG_subrange_type - .long 7257 # DW_AT_type + .byte 75 # Abbrev [75] 0x1dab:0x6 DW_TAG_subrange_type + .long 7360 # DW_AT_type .byte 2 # DW_AT_count .byte 0 # End Of Children Mark - .byte 65 # Abbrev [65] 0x1d4c:0x5 DW_TAG_const_type - .long 7505 # DW_AT_type - .byte 79 # Abbrev [79] 0x1d51:0x5 DW_TAG_volatile_type - .long 7225 # DW_AT_type - .byte 65 # Abbrev [65] 0x1d56:0x5 DW_TAG_const_type - .long 7515 # DW_AT_type - .byte 81 # Abbrev [81] 0x1d5b:0x1 DW_TAG_volatile_type - .byte 76 # Abbrev [76] 0x1d5c:0x10 DW_TAG_structure_type + .byte 73 # Abbrev [73] 0x1db2:0x5 DW_TAG_const_type + .long 7607 # DW_AT_type + .byte 87 # Abbrev [87] 0x1db7:0x5 DW_TAG_volatile_type + .long 7328 # DW_AT_type + .byte 73 # Abbrev [73] 0x1dbc:0x5 DW_TAG_const_type + .long 7617 # DW_AT_type + .byte 89 # Abbrev [89] 0x1dc1:0x1 DW_TAG_volatile_type + .byte 84 # Abbrev [84] 0x1dc2:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 328 # DW_AT_name + .short 314 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1d63:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1d65:0x5 DW_TAG_template_type_parameter - .long 966 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1dc9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1dcb:0x5 DW_TAG_template_type_parameter + .long 371 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 82 # Abbrev [82] 0x1d6c:0x9 DW_TAG_ptr_to_member_type - .long 7541 # DW_AT_type - .long 7203 # DW_AT_containing_type - .byte 71 # Abbrev [71] 0x1d75:0x7 DW_TAG_subroutine_type - .byte 19 # Abbrev [19] 0x1d76:0x5 DW_TAG_formal_parameter - .long 7548 # DW_AT_type + .byte 90 # Abbrev [90] 0x1dd2:0x9 DW_TAG_ptr_to_member_type + .long 7643 # DW_AT_type + .long 7306 # DW_AT_containing_type + .byte 79 # Abbrev [79] 0x1ddb:0x7 DW_TAG_subroutine_type + .byte 19 # Abbrev [19] 0x1ddc:0x5 DW_TAG_formal_parameter + .long 7650 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1d7c:0x5 DW_TAG_pointer_type - .long 7553 # DW_AT_type - .byte 65 # Abbrev [65] 0x1d81:0x5 DW_TAG_const_type - .long 7203 # DW_AT_type - .byte 82 # Abbrev [82] 0x1d86:0x9 DW_TAG_ptr_to_member_type - .long 7567 # DW_AT_type - .long 7203 # DW_AT_containing_type - .byte 83 # Abbrev [83] 0x1d8f:0x7 DW_TAG_subroutine_type + .byte 47 # Abbrev [47] 0x1de2:0x5 DW_TAG_pointer_type + .long 7655 # DW_AT_type + .byte 73 # Abbrev [73] 0x1de7:0x5 DW_TAG_const_type + .long 7306 # DW_AT_type + .byte 90 # Abbrev [90] 0x1dec:0x9 DW_TAG_ptr_to_member_type + .long 7669 # DW_AT_type + .long 7306 # DW_AT_containing_type + .byte 91 # Abbrev [91] 0x1df5:0x7 DW_TAG_subroutine_type # DW_AT_reference - .byte 19 # Abbrev [19] 0x1d90:0x5 DW_TAG_formal_parameter - .long 7574 # DW_AT_type + .byte 19 # Abbrev [19] 0x1df6:0x5 DW_TAG_formal_parameter + .long 7676 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1d96:0x5 DW_TAG_pointer_type - .long 7579 # DW_AT_type - .byte 79 # Abbrev [79] 0x1d9b:0x5 DW_TAG_volatile_type - .long 7203 # DW_AT_type - .byte 82 # Abbrev [82] 0x1da0:0x9 DW_TAG_ptr_to_member_type - .long 7593 # DW_AT_type - .long 7203 # DW_AT_containing_type - .byte 84 # Abbrev [84] 0x1da9:0x7 DW_TAG_subroutine_type + .byte 47 # Abbrev [47] 0x1dfc:0x5 DW_TAG_pointer_type + .long 7681 # DW_AT_type + .byte 87 # Abbrev [87] 0x1e01:0x5 DW_TAG_volatile_type + .long 7306 # DW_AT_type + .byte 90 # Abbrev [90] 0x1e06:0x9 DW_TAG_ptr_to_member_type + .long 7695 # DW_AT_type + .long 7306 # DW_AT_containing_type + .byte 92 # Abbrev [92] 0x1e0f:0x7 DW_TAG_subroutine_type # DW_AT_rvalue_reference - .byte 19 # Abbrev [19] 0x1daa:0x5 DW_TAG_formal_parameter - .long 7600 # DW_AT_type + .byte 19 # Abbrev [19] 0x1e10:0x5 DW_TAG_formal_parameter + .long 7702 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1db0:0x5 DW_TAG_pointer_type - .long 7605 # DW_AT_type - .byte 65 # Abbrev [65] 0x1db5:0x5 DW_TAG_const_type - .long 7579 # DW_AT_type - .byte 65 # Abbrev [65] 0x1dba:0x5 DW_TAG_const_type - .long 7402 # DW_AT_type - .byte 63 # Abbrev [63] 0x1dbf:0x5 DW_TAG_reference_type - .long 7620 # DW_AT_type - .byte 65 # Abbrev [65] 0x1dc4:0x5 DW_TAG_const_type - .long 7625 # DW_AT_type - .byte 66 # Abbrev [66] 0x1dc9:0xc DW_TAG_array_type - .long 7270 # DW_AT_type - .byte 67 # Abbrev [67] 0x1dce:0x6 DW_TAG_subrange_type - .long 7257 # DW_AT_type + .byte 47 # Abbrev [47] 0x1e16:0x5 DW_TAG_pointer_type + .long 7707 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e1b:0x5 DW_TAG_const_type + .long 7681 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e20:0x5 DW_TAG_const_type + .long 7504 # DW_AT_type + .byte 71 # Abbrev [71] 0x1e25:0x5 DW_TAG_reference_type + .long 7722 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e2a:0x5 DW_TAG_const_type + .long 7727 # DW_AT_type + .byte 74 # Abbrev [74] 0x1e2f:0xc DW_TAG_array_type + .long 7373 # DW_AT_type + .byte 75 # Abbrev [75] 0x1e34:0x6 DW_TAG_subrange_type + .long 7360 # DW_AT_type .byte 1 # DW_AT_count .byte 0 # End Of Children Mark - .byte 65 # Abbrev [65] 0x1dd5:0x5 DW_TAG_const_type - .long 7642 # DW_AT_type - .byte 85 # Abbrev [85] 0x1dda:0x1 DW_TAG_subroutine_type + .byte 73 # Abbrev [73] 0x1e3b:0x5 DW_TAG_const_type + .long 7744 # DW_AT_type + .byte 93 # Abbrev [93] 0x1e40:0x1 DW_TAG_subroutine_type # DW_AT_reference - .byte 79 # Abbrev [79] 0x1ddb:0x5 DW_TAG_volatile_type - .long 7648 # DW_AT_type - .byte 86 # Abbrev [86] 0x1de0:0x1 DW_TAG_subroutine_type + .byte 87 # Abbrev [87] 0x1e41:0x5 DW_TAG_volatile_type + .long 7750 # DW_AT_type + .byte 94 # Abbrev [94] 0x1e46:0x1 DW_TAG_subroutine_type # DW_AT_rvalue_reference - .byte 65 # Abbrev [65] 0x1de1:0x5 DW_TAG_const_type - .long 7654 # DW_AT_type - .byte 79 # Abbrev [79] 0x1de6:0x5 DW_TAG_volatile_type - .long 7401 # DW_AT_type - .byte 65 # Abbrev [65] 0x1deb:0x5 DW_TAG_const_type - .long 7664 # DW_AT_type - .byte 66 # Abbrev [66] 0x1df0:0xc DW_TAG_array_type - .long 7225 # DW_AT_type - .byte 67 # Abbrev [67] 0x1df5:0x6 DW_TAG_subrange_type - .long 7257 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e47:0x5 DW_TAG_const_type + .long 7756 # DW_AT_type + .byte 87 # Abbrev [87] 0x1e4c:0x5 DW_TAG_volatile_type + .long 7503 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e51:0x5 DW_TAG_const_type + .long 7766 # DW_AT_type + .byte 74 # Abbrev [74] 0x1e56:0xc DW_TAG_array_type + .long 7328 # DW_AT_type + .byte 75 # Abbrev [75] 0x1e5b:0x6 DW_TAG_subrange_type + .long 7360 # DW_AT_type .byte 1 # DW_AT_count .byte 0 # End Of Children Mark - .byte 63 # Abbrev [63] 0x1dfc:0x5 DW_TAG_reference_type - .long 7659 # DW_AT_type - .byte 63 # Abbrev [63] 0x1e01:0x5 DW_TAG_reference_type - .long 7686 # DW_AT_type - .byte 65 # Abbrev [65] 0x1e06:0x5 DW_TAG_const_type - .long 7691 # DW_AT_type - .byte 82 # Abbrev [82] 0x1e0b:0x9 DW_TAG_ptr_to_member_type - .long 7700 # DW_AT_type - .long 7203 # DW_AT_containing_type - .byte 71 # Abbrev [71] 0x1e14:0x7 DW_TAG_subroutine_type - .byte 19 # Abbrev [19] 0x1e15:0x5 DW_TAG_formal_parameter - .long 7707 # DW_AT_type + .byte 71 # Abbrev [71] 0x1e62:0x5 DW_TAG_reference_type + .long 7761 # DW_AT_type + .byte 71 # Abbrev [71] 0x1e67:0x5 DW_TAG_reference_type + .long 7788 # DW_AT_type + .byte 73 # Abbrev [73] 0x1e6c:0x5 DW_TAG_const_type + .long 7793 # DW_AT_type + .byte 90 # Abbrev [90] 0x1e71:0x9 DW_TAG_ptr_to_member_type + .long 7802 # DW_AT_type + .long 7306 # DW_AT_containing_type + .byte 79 # Abbrev [79] 0x1e7a:0x7 DW_TAG_subroutine_type + .byte 19 # Abbrev [19] 0x1e7b:0x5 DW_TAG_formal_parameter + .long 7809 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1e1b:0x5 DW_TAG_pointer_type - .long 7203 # DW_AT_type - .byte 70 # Abbrev [70] 0x1e20:0xb DW_TAG_subroutine_type - .long 7723 # DW_AT_type - .byte 52 # Abbrev [52] 0x1e25:0x5 DW_TAG_formal_parameter + .byte 47 # Abbrev [47] 0x1e81:0x5 DW_TAG_pointer_type + .long 7306 # DW_AT_type + .byte 78 # Abbrev [78] 0x1e86:0xb DW_TAG_subroutine_type + .long 7825 # DW_AT_type + .byte 45 # Abbrev [45] 0x1e8b:0x5 DW_TAG_formal_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1e2b:0x5 DW_TAG_pointer_type - .long 7728 # DW_AT_type - .byte 71 # Abbrev [71] 0x1e30:0x7 DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1e31:0x5 DW_TAG_formal_parameter - .long 4531 # DW_AT_type - .byte 0 # End Of Children Mark - .byte 66 # Abbrev [66] 0x1e37:0xc DW_TAG_array_type - .long 7210 # DW_AT_type - .byte 67 # Abbrev [67] 0x1e3c:0x6 DW_TAG_subrange_type - .long 7257 # DW_AT_type + .byte 47 # Abbrev [47] 0x1e91:0x5 DW_TAG_pointer_type + .long 7830 # DW_AT_type + .byte 79 # Abbrev [79] 0x1e96:0x7 DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1e97:0x5 DW_TAG_formal_parameter + .long 3923 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 74 # Abbrev [74] 0x1e9d:0xc DW_TAG_array_type + .long 7313 # DW_AT_type + .byte 75 # Abbrev [75] 0x1ea2:0x6 DW_TAG_subrange_type + .long 7360 # DW_AT_type .byte 1 # DW_AT_count .byte 0 # End Of Children Mark - .byte 71 # Abbrev [71] 0x1e43:0x7 DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1e44:0x5 DW_TAG_formal_parameter - .long 971 # DW_AT_type + .byte 79 # Abbrev [79] 0x1ea9:0x7 DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1eaa:0x5 DW_TAG_formal_parameter + .long 376 # DW_AT_type .byte 0 # End Of Children Mark - .byte 71 # Abbrev [71] 0x1e4a:0xc DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1e4b:0x5 DW_TAG_formal_parameter - .long 979 # DW_AT_type - .byte 52 # Abbrev [52] 0x1e50:0x5 DW_TAG_formal_parameter - .long 971 # DW_AT_type + .byte 79 # Abbrev [79] 0x1eb0:0xc DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1eb1:0x5 DW_TAG_formal_parameter + .long 384 # DW_AT_type + .byte 45 # Abbrev [45] 0x1eb6:0x5 DW_TAG_formal_parameter + .long 376 # DW_AT_type .byte 0 # End Of Children Mark - .byte 71 # Abbrev [71] 0x1e56:0x7 DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1e57:0x5 DW_TAG_formal_parameter - .long 979 # DW_AT_type + .byte 79 # Abbrev [79] 0x1ebc:0x7 DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1ebd:0x5 DW_TAG_formal_parameter + .long 384 # DW_AT_type .byte 0 # End Of Children Mark - .byte 87 # Abbrev [87] 0x1e5d:0x5 DW_TAG_base_type - .short 370 # DW_AT_name + .byte 95 # Abbrev [95] 0x1ec3:0x6 DW_TAG_base_type + .short 356 # DW_AT_name .byte 5 # DW_AT_encoding .byte 1 # DW_AT_byte_size - .byte 65 # Abbrev [65] 0x1e62:0x5 DW_TAG_const_type - .long 7783 # DW_AT_type - .byte 87 # Abbrev [87] 0x1e67:0x5 DW_TAG_base_type - .short 373 # DW_AT_name + .byte 3 # DW_AT_bit_size + .byte 73 # Abbrev [73] 0x1ec9:0x5 DW_TAG_const_type + .long 7886 # DW_AT_type + .byte 95 # Abbrev [95] 0x1ece:0x6 DW_TAG_base_type + .short 360 # DW_AT_name .byte 7 # DW_AT_encoding .byte 1 # DW_AT_byte_size - .byte 71 # Abbrev [71] 0x1e6c:0xc DW_TAG_subroutine_type - .byte 52 # Abbrev [52] 0x1e6d:0x5 DW_TAG_formal_parameter - .long 7800 # DW_AT_type - .byte 52 # Abbrev [52] 0x1e72:0x5 DW_TAG_formal_parameter - .long 7800 # DW_AT_type - .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1e78:0xa DW_TAG_structure_type + .byte 5 # DW_AT_bit_size + .byte 95 # Abbrev [95] 0x1ed4:0x6 DW_TAG_base_type + .short 363 # DW_AT_name + .byte 5 # DW_AT_encoding + .byte 16 # DW_AT_byte_size + .byte 65 # DW_AT_bit_size + .byte 73 # Abbrev [73] 0x1eda:0x5 DW_TAG_const_type + .long 7903 # DW_AT_type + .byte 95 # Abbrev [95] 0x1edf:0x6 DW_TAG_base_type + .short 366 # DW_AT_name + .byte 7 # DW_AT_encoding + .byte 16 # DW_AT_byte_size + .byte 65 # DW_AT_bit_size + .byte 79 # Abbrev [79] 0x1ee5:0xc DW_TAG_subroutine_type + .byte 45 # Abbrev [45] 0x1ee6:0x5 DW_TAG_formal_parameter + .long 7921 # DW_AT_type + .byte 45 # Abbrev [45] 0x1eeb:0x5 DW_TAG_formal_parameter + .long 7921 # DW_AT_type + .byte 0 # End Of Children Mark + .byte 84 # Abbrev [84] 0x1ef1:0xa DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 376 # DW_AT_name + .short 369 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 50 # Abbrev [50] 0x1e7f:0x2 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name + .byte 14 # DW_AT_decl_line + .byte 44 # Abbrev [44] 0x1ef8:0x2 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name .byte 0 # End Of Children Mark - .byte 82 # Abbrev [82] 0x1e82:0x9 DW_TAG_ptr_to_member_type + .byte 90 # Abbrev [90] 0x1efb:0x9 DW_TAG_ptr_to_member_type .long 54 # DW_AT_type - .long 7800 # DW_AT_containing_type - .byte 88 # Abbrev [88] 0x1e8b:0x2 DW_TAG_subroutine_type + .long 7921 # DW_AT_containing_type + .byte 96 # Abbrev [96] 0x1f04:0x2 DW_TAG_subroutine_type .byte 200 # DW_AT_calling_convention - .byte 82 # Abbrev [82] 0x1e8d:0x9 DW_TAG_ptr_to_member_type - .long 7830 # DW_AT_type - .long 7039 # DW_AT_containing_type - .byte 71 # Abbrev [71] 0x1e96:0x7 DW_TAG_subroutine_type - .byte 19 # Abbrev [19] 0x1e97:0x5 DW_TAG_formal_parameter - .long 7057 # DW_AT_type + .byte 97 # Abbrev [97] 0x1f06:0x5 DW_TAG_subroutine_type + .long 54 # DW_AT_type + .byte 90 # Abbrev [90] 0x1f0b:0x9 DW_TAG_ptr_to_member_type + .long 7956 # DW_AT_type + .long 6762 # DW_AT_containing_type + .byte 79 # Abbrev [79] 0x1f14:0x7 DW_TAG_subroutine_type + .byte 19 # Abbrev [19] 0x1f15:0x5 DW_TAG_formal_parameter + .long 6780 # DW_AT_type # DW_AT_artificial .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1e9d:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1f1b:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 389 # DW_AT_name + .short 388 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 56 # DW_AT_decl_line - .byte 89 # Abbrev [89] 0x1ea4:0x8 DW_TAG_template_value_parameter + .byte 58 # DW_AT_decl_line + .byte 58 # Abbrev [58] 0x1f22:0x8 DW_TAG_template_value_parameter .long 75 # DW_AT_type - .short 388 # DW_AT_name + .short 387 # DW_AT_name .byte 3 # DW_AT_const_value .byte 0 # End Of Children Mark - .byte 90 # Abbrev [90] 0x1ead:0x9 DW_TAG_typedef - .long 7464 # DW_AT_type - .short 393 # DW_AT_name + .byte 98 # Abbrev [98] 0x1f2b:0x9 DW_TAG_typedef + .long 7566 # DW_AT_type + .short 392 # DW_AT_name .byte 0 # DW_AT_decl_file - .byte 147 # DW_AT_decl_line - .byte 76 # Abbrev [76] 0x1eb6:0x12 DW_TAG_structure_type + .byte 149 # DW_AT_decl_line + .byte 84 # Abbrev [84] 0x1f34:0x12 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 397 # DW_AT_name + .short 396 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 178 # DW_AT_decl_line - .byte 91 # Abbrev [91] 0x1ebd:0xa DW_TAG_member - .short 390 # DW_AT_name - .long 7880 # DW_AT_type + .byte 180 # DW_AT_decl_line + .byte 99 # Abbrev [99] 0x1f3b:0xa DW_TAG_member + .short 389 # DW_AT_name + .long 8006 # DW_AT_type .byte 0 # DW_AT_decl_file - .byte 179 # DW_AT_decl_line + .byte 181 # DW_AT_decl_line .byte 0 # DW_AT_data_member_location .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1ec8:0x17 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1f46:0x17 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 396 # DW_AT_name + .short 395 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 175 # DW_AT_decl_line - .byte 15 # Abbrev [15] 0x1ecf:0x6 DW_TAG_template_type_parameter + .byte 177 # DW_AT_decl_line + .byte 15 # Abbrev [15] 0x1f4d:0x6 DW_TAG_template_type_parameter .long 59 # DW_AT_type .byte 20 # DW_AT_name - .byte 33 # Abbrev [33] 0x1ed5:0x9 DW_TAG_GNU_template_parameter_pack - .byte 194 # DW_AT_name - .byte 38 # Abbrev [38] 0x1ed7:0x6 DW_TAG_template_value_parameter + .byte 30 # Abbrev [30] 0x1f53:0x9 DW_TAG_GNU_template_parameter_pack + .byte 180 # DW_AT_name + .byte 36 # Abbrev [36] 0x1f55:0x6 DW_TAG_template_value_parameter .long 59 # DW_AT_type .byte 0 # DW_AT_const_value .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1edf:0x5 DW_TAG_pointer_type - .long 7908 # DW_AT_type - .byte 92 # Abbrev [92] 0x1ee4:0xc DW_TAG_structure_type - .short 398 # DW_AT_name + .byte 47 # Abbrev [47] 0x1f5d:0x5 DW_TAG_pointer_type + .long 8034 # DW_AT_type + .byte 67 # Abbrev [67] 0x1f62:0xc DW_TAG_structure_type + .short 397 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1ee7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1ee9:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x1f65:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1f67:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1ef0:0x5 DW_TAG_pointer_type - .long 7925 # DW_AT_type - .byte 92 # Abbrev [92] 0x1ef5:0xc DW_TAG_structure_type - .short 399 # DW_AT_name + .byte 47 # Abbrev [47] 0x1f6e:0x5 DW_TAG_pointer_type + .long 8051 # DW_AT_type + .byte 67 # Abbrev [67] 0x1f73:0xc DW_TAG_structure_type + .short 398 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1ef8:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1efa:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 30 # Abbrev [30] 0x1f76:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1f78:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1f01:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1f7f:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 400 # DW_AT_name + .short 399 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1f08:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f0a:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1f86:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1f88:0x5 DW_TAG_template_type_parameter .long 202 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1f11:0x5 DW_TAG_pointer_type - .long 7958 # DW_AT_type - .byte 92 # Abbrev [92] 0x1f16:0xc DW_TAG_structure_type - .short 401 # DW_AT_name + .byte 47 # Abbrev [47] 0x1f8f:0x5 DW_TAG_pointer_type + .long 8084 # DW_AT_type + .byte 67 # Abbrev [67] 0x1f94:0xc DW_TAG_structure_type + .short 400 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1f19:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f1b:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x1f97:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1f99:0x5 DW_TAG_template_type_parameter .long 202 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1f22:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1fa0:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 402 # DW_AT_name + .short 401 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1f29:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f2b:0x5 DW_TAG_template_type_parameter - .long 7191 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1fa7:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1fa9:0x5 DW_TAG_template_type_parameter + .long 7294 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1f32:0x5 DW_TAG_pointer_type - .long 7991 # DW_AT_type - .byte 92 # Abbrev [92] 0x1f37:0xc DW_TAG_structure_type - .short 403 # DW_AT_name + .byte 47 # Abbrev [47] 0x1fb0:0x5 DW_TAG_pointer_type + .long 8117 # DW_AT_type + .byte 67 # Abbrev [67] 0x1fb5:0xc DW_TAG_structure_type + .short 402 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1f3a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f3c:0x5 DW_TAG_template_type_parameter - .long 7191 # DW_AT_type + .byte 30 # Abbrev [30] 0x1fb8:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1fba:0x5 DW_TAG_template_type_parameter + .long 7294 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1f43:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1fc1:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 404 # DW_AT_name + .short 403 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1f4a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f4c:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1fc8:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1fca:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1f53:0x5 DW_TAG_pointer_type - .long 8024 # DW_AT_type - .byte 92 # Abbrev [92] 0x1f58:0xc DW_TAG_structure_type - .short 405 # DW_AT_name + .byte 47 # Abbrev [47] 0x1fd1:0x5 DW_TAG_pointer_type + .long 8150 # DW_AT_type + .byte 67 # Abbrev [67] 0x1fd6:0xc DW_TAG_structure_type + .short 404 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1f5b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f5d:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type + .byte 30 # Abbrev [30] 0x1fd9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1fdb:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1f64:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x1fe2:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 406 # DW_AT_name + .short 405 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1f6b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f6d:0x5 DW_TAG_template_type_parameter - .long 469 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x1fe9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1feb:0x5 DW_TAG_template_type_parameter + .long 7052 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1f74:0x5 DW_TAG_pointer_type - .long 8057 # DW_AT_type - .byte 92 # Abbrev [92] 0x1f79:0xc DW_TAG_structure_type - .short 407 # DW_AT_name + .byte 47 # Abbrev [47] 0x1ff2:0x5 DW_TAG_pointer_type + .long 8183 # DW_AT_type + .byte 67 # Abbrev [67] 0x1ff7:0xc DW_TAG_structure_type + .short 406 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1f7c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f7e:0x5 DW_TAG_template_type_parameter - .long 469 # DW_AT_type + .byte 30 # Abbrev [30] 0x1ffa:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x1ffc:0x5 DW_TAG_template_type_parameter + .long 7052 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1f85:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2003:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 408 # DW_AT_name + .short 407 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1f8c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f8e:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x200a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x200c:0x5 DW_TAG_template_type_parameter .long 75 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1f95:0x5 DW_TAG_pointer_type - .long 8090 # DW_AT_type - .byte 92 # Abbrev [92] 0x1f9a:0xc DW_TAG_structure_type - .short 409 # DW_AT_name + .byte 47 # Abbrev [47] 0x2013:0x5 DW_TAG_pointer_type + .long 8216 # DW_AT_type + .byte 67 # Abbrev [67] 0x2018:0xc DW_TAG_structure_type + .short 408 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1f9d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1f9f:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x201b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x201d:0x5 DW_TAG_template_type_parameter .long 75 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1fa6:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2024:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 410 # DW_AT_name + .short 409 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1fad:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1faf:0x5 DW_TAG_template_type_parameter - .long 7195 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x202b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x202d:0x5 DW_TAG_template_type_parameter + .long 7298 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1fb6:0x5 DW_TAG_pointer_type - .long 8123 # DW_AT_type - .byte 92 # Abbrev [92] 0x1fbb:0xc DW_TAG_structure_type - .short 411 # DW_AT_name + .byte 47 # Abbrev [47] 0x2034:0x5 DW_TAG_pointer_type + .long 8249 # DW_AT_type + .byte 67 # Abbrev [67] 0x2039:0xc DW_TAG_structure_type + .short 410 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1fbe:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1fc0:0x5 DW_TAG_template_type_parameter - .long 7195 # DW_AT_type + .byte 30 # Abbrev [30] 0x203c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x203e:0x5 DW_TAG_template_type_parameter + .long 7298 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1fc7:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2045:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 412 # DW_AT_name + .short 411 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1fce:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1fd0:0x5 DW_TAG_template_type_parameter - .long 7199 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x204c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x204e:0x5 DW_TAG_template_type_parameter + .long 7302 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1fd7:0x5 DW_TAG_pointer_type - .long 8156 # DW_AT_type - .byte 92 # Abbrev [92] 0x1fdc:0xc DW_TAG_structure_type - .short 413 # DW_AT_name + .byte 47 # Abbrev [47] 0x2055:0x5 DW_TAG_pointer_type + .long 8282 # DW_AT_type + .byte 67 # Abbrev [67] 0x205a:0xc DW_TAG_structure_type + .short 412 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x1fdf:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1fe1:0x5 DW_TAG_template_type_parameter - .long 7199 # DW_AT_type + .byte 30 # Abbrev [30] 0x205d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x205f:0x5 DW_TAG_template_type_parameter + .long 7302 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x1fe8:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2066:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 414 # DW_AT_name + .short 413 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x1fef:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x1ff1:0x5 DW_TAG_template_type_parameter - .long 7203 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x206d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x206f:0x5 DW_TAG_template_type_parameter + .long 7306 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x1ff8:0x5 DW_TAG_pointer_type - .long 8189 # DW_AT_type - .byte 92 # Abbrev [92] 0x1ffd:0xc DW_TAG_structure_type - .short 415 # DW_AT_name + .byte 47 # Abbrev [47] 0x2076:0x5 DW_TAG_pointer_type + .long 8315 # DW_AT_type + .byte 67 # Abbrev [67] 0x207b:0xc DW_TAG_structure_type + .short 414 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2000:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2002:0x5 DW_TAG_template_type_parameter - .long 7203 # DW_AT_type + .byte 30 # Abbrev [30] 0x207e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2080:0x5 DW_TAG_template_type_parameter + .long 7306 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2009:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2087:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 416 # DW_AT_name + .short 415 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2010:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2012:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x208e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2090:0x5 DW_TAG_template_type_parameter .long 170 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2019:0x5 DW_TAG_pointer_type - .long 8222 # DW_AT_type - .byte 92 # Abbrev [92] 0x201e:0xc DW_TAG_structure_type - .short 417 # DW_AT_name + .byte 47 # Abbrev [47] 0x2097:0x5 DW_TAG_pointer_type + .long 8348 # DW_AT_type + .byte 67 # Abbrev [67] 0x209c:0xc DW_TAG_structure_type + .short 416 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2021:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2023:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x209f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20a1:0x5 DW_TAG_template_type_parameter .long 170 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x202a:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x20a8:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 418 # DW_AT_name + .short 417 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2031:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2033:0x5 DW_TAG_template_type_parameter - .long 7205 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x20af:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20b1:0x5 DW_TAG_template_type_parameter + .long 7308 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x203a:0x5 DW_TAG_pointer_type - .long 8255 # DW_AT_type - .byte 92 # Abbrev [92] 0x203f:0xc DW_TAG_structure_type - .short 419 # DW_AT_name + .byte 47 # Abbrev [47] 0x20b8:0x5 DW_TAG_pointer_type + .long 8381 # DW_AT_type + .byte 67 # Abbrev [67] 0x20bd:0xc DW_TAG_structure_type + .short 418 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2042:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2044:0x5 DW_TAG_template_type_parameter - .long 7205 # DW_AT_type + .byte 30 # Abbrev [30] 0x20c0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20c2:0x5 DW_TAG_template_type_parameter + .long 7308 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x204b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x20c9:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 420 # DW_AT_name + .short 419 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2052:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2054:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x20d0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20d2:0x5 DW_TAG_template_type_parameter .long 174 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x205b:0x5 DW_TAG_pointer_type - .long 8288 # DW_AT_type - .byte 92 # Abbrev [92] 0x2060:0xc DW_TAG_structure_type - .short 421 # DW_AT_name + .byte 47 # Abbrev [47] 0x20d9:0x5 DW_TAG_pointer_type + .long 8414 # DW_AT_type + .byte 67 # Abbrev [67] 0x20de:0xc DW_TAG_structure_type + .short 420 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2063:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2065:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x20e1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20e3:0x5 DW_TAG_template_type_parameter .long 174 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x206c:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x20ea:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 422 # DW_AT_name + .short 421 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2073:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2075:0x5 DW_TAG_template_type_parameter - .long 7210 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x20f1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x20f3:0x5 DW_TAG_template_type_parameter + .long 7313 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x207c:0x5 DW_TAG_pointer_type - .long 8321 # DW_AT_type - .byte 92 # Abbrev [92] 0x2081:0xc DW_TAG_structure_type - .short 423 # DW_AT_name + .byte 47 # Abbrev [47] 0x20fa:0x5 DW_TAG_pointer_type + .long 8447 # DW_AT_type + .byte 67 # Abbrev [67] 0x20ff:0xc DW_TAG_structure_type + .short 422 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2084:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2086:0x5 DW_TAG_template_type_parameter - .long 7210 # DW_AT_type + .byte 30 # Abbrev [30] 0x2102:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2104:0x5 DW_TAG_template_type_parameter + .long 7313 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x208d:0x15 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x210b:0x15 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 424 # DW_AT_name + .short 423 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2094:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2096:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2112:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2114:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x209b:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 31 # Abbrev [31] 0x2119:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x20a2:0x5 DW_TAG_pointer_type - .long 8359 # DW_AT_type - .byte 92 # Abbrev [92] 0x20a7:0x11 DW_TAG_structure_type - .short 425 # DW_AT_name + .byte 47 # Abbrev [47] 0x2120:0x5 DW_TAG_pointer_type + .long 8485 # DW_AT_type + .byte 67 # Abbrev [67] 0x2125:0x11 DW_TAG_structure_type + .short 424 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x20aa:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x20ac:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x2128:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x212a:0x5 DW_TAG_template_type_parameter .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x20b1:0x5 DW_TAG_template_type_parameter - .long 4531 # DW_AT_type + .byte 31 # Abbrev [31] 0x212f:0x5 DW_TAG_template_type_parameter + .long 3923 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x20b8:0x5 DW_TAG_pointer_type - .long 8381 # DW_AT_type - .byte 92 # Abbrev [92] 0x20bd:0xc DW_TAG_structure_type - .short 426 # DW_AT_name + .byte 47 # Abbrev [47] 0x2136:0x5 DW_TAG_pointer_type + .long 8507 # DW_AT_type + .byte 67 # Abbrev [67] 0x213b:0xc DW_TAG_structure_type + .short 425 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x20c0:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x20c2:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type + .byte 30 # Abbrev [30] 0x213e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2140:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x20c9:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2147:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 427 # DW_AT_name + .short 426 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x20d0:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x20d2:0x5 DW_TAG_template_type_parameter - .long 7230 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x214e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2150:0x5 DW_TAG_template_type_parameter + .long 7333 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x20d9:0x5 DW_TAG_pointer_type - .long 8414 # DW_AT_type - .byte 92 # Abbrev [92] 0x20de:0xc DW_TAG_structure_type - .short 428 # DW_AT_name + .byte 47 # Abbrev [47] 0x2157:0x5 DW_TAG_pointer_type + .long 8540 # DW_AT_type + .byte 67 # Abbrev [67] 0x215c:0xc DW_TAG_structure_type + .short 427 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x20e1:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x20e3:0x5 DW_TAG_template_type_parameter - .long 7230 # DW_AT_type + .byte 30 # Abbrev [30] 0x215f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2161:0x5 DW_TAG_template_type_parameter + .long 7333 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x20ea:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2168:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 429 # DW_AT_name + .short 428 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x20f1:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x20f3:0x5 DW_TAG_template_type_parameter - .long 7235 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x216f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2171:0x5 DW_TAG_template_type_parameter + .long 7338 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x20fa:0x5 DW_TAG_pointer_type - .long 8447 # DW_AT_type - .byte 92 # Abbrev [92] 0x20ff:0xc DW_TAG_structure_type - .short 430 # DW_AT_name + .byte 47 # Abbrev [47] 0x2178:0x5 DW_TAG_pointer_type + .long 8573 # DW_AT_type + .byte 67 # Abbrev [67] 0x217d:0xc DW_TAG_structure_type + .short 429 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2102:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2104:0x5 DW_TAG_template_type_parameter - .long 7235 # DW_AT_type + .byte 30 # Abbrev [30] 0x2180:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2182:0x5 DW_TAG_template_type_parameter + .long 7338 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x210b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2189:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 431 # DW_AT_name + .short 430 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2112:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2114:0x5 DW_TAG_template_type_parameter - .long 7240 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2190:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2192:0x5 DW_TAG_template_type_parameter + .long 7343 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x211b:0x5 DW_TAG_pointer_type - .long 8480 # DW_AT_type - .byte 92 # Abbrev [92] 0x2120:0xc DW_TAG_structure_type - .short 432 # DW_AT_name + .byte 47 # Abbrev [47] 0x2199:0x5 DW_TAG_pointer_type + .long 8606 # DW_AT_type + .byte 67 # Abbrev [67] 0x219e:0xc DW_TAG_structure_type + .short 431 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2123:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2125:0x5 DW_TAG_template_type_parameter - .long 7240 # DW_AT_type + .byte 30 # Abbrev [30] 0x21a1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x21a3:0x5 DW_TAG_template_type_parameter + .long 7343 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x212c:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x21aa:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 433 # DW_AT_name + .short 432 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2133:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2135:0x5 DW_TAG_template_type_parameter - .long 7245 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x21b1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x21b3:0x5 DW_TAG_template_type_parameter + .long 7348 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x213c:0x5 DW_TAG_pointer_type - .long 8513 # DW_AT_type - .byte 92 # Abbrev [92] 0x2141:0xc DW_TAG_structure_type - .short 434 # DW_AT_name + .byte 47 # Abbrev [47] 0x21ba:0x5 DW_TAG_pointer_type + .long 8639 # DW_AT_type + .byte 67 # Abbrev [67] 0x21bf:0xc DW_TAG_structure_type + .short 433 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2144:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2146:0x5 DW_TAG_template_type_parameter - .long 7245 # DW_AT_type + .byte 30 # Abbrev [30] 0x21c2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x21c4:0x5 DW_TAG_template_type_parameter + .long 7348 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x214d:0xc DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x21cb:0xc DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 435 # DW_AT_name + .short 434 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2154:0x4 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 35 # Abbrev [35] 0x2156:0x1 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x21d2:0x4 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 32 # Abbrev [32] 0x21d4:0x1 DW_TAG_template_type_parameter .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2159:0x5 DW_TAG_pointer_type - .long 8542 # DW_AT_type - .byte 92 # Abbrev [92] 0x215e:0x8 DW_TAG_structure_type - .short 436 # DW_AT_name + .byte 47 # Abbrev [47] 0x21d7:0x5 DW_TAG_pointer_type + .long 8668 # DW_AT_type + .byte 67 # Abbrev [67] 0x21dc:0x8 DW_TAG_structure_type + .short 435 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2161:0x4 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 35 # Abbrev [35] 0x2163:0x1 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x21df:0x4 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 32 # Abbrev [32] 0x21e1:0x1 DW_TAG_template_type_parameter .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2166:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x21e4:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 437 # DW_AT_name + .short 436 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x216d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x216f:0x5 DW_TAG_template_type_parameter - .long 7267 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x21eb:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x21ed:0x5 DW_TAG_template_type_parameter + .long 7370 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2176:0x5 DW_TAG_pointer_type - .long 8571 # DW_AT_type - .byte 92 # Abbrev [92] 0x217b:0xc DW_TAG_structure_type - .short 438 # DW_AT_name + .byte 47 # Abbrev [47] 0x21f4:0x5 DW_TAG_pointer_type + .long 8697 # DW_AT_type + .byte 67 # Abbrev [67] 0x21f9:0xc DW_TAG_structure_type + .short 437 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x217e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2180:0x5 DW_TAG_template_type_parameter - .long 7267 # DW_AT_type + .byte 30 # Abbrev [30] 0x21fc:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x21fe:0x5 DW_TAG_template_type_parameter + .long 7370 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2187:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2205:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 439 # DW_AT_name + .short 438 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x218e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2190:0x5 DW_TAG_template_type_parameter - .long 697 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x220c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x220e:0x5 DW_TAG_template_type_parameter + .long 4793 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2197:0x5 DW_TAG_pointer_type - .long 8604 # DW_AT_type - .byte 92 # Abbrev [92] 0x219c:0xc DW_TAG_structure_type - .short 440 # DW_AT_name + .byte 47 # Abbrev [47] 0x2215:0x5 DW_TAG_pointer_type + .long 8730 # DW_AT_type + .byte 67 # Abbrev [67] 0x221a:0xc DW_TAG_structure_type + .short 439 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x219f:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21a1:0x5 DW_TAG_template_type_parameter - .long 697 # DW_AT_type + .byte 30 # Abbrev [30] 0x221d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x221f:0x5 DW_TAG_template_type_parameter + .long 4793 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x21a8:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2226:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 441 # DW_AT_name + .short 440 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x21af:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21b1:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x222d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x222f:0x5 DW_TAG_template_type_parameter .long 182 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x21b8:0x5 DW_TAG_pointer_type - .long 8637 # DW_AT_type - .byte 92 # Abbrev [92] 0x21bd:0xc DW_TAG_structure_type - .short 442 # DW_AT_name + .byte 47 # Abbrev [47] 0x2236:0x5 DW_TAG_pointer_type + .long 8763 # DW_AT_type + .byte 67 # Abbrev [67] 0x223b:0xc DW_TAG_structure_type + .short 441 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x21c0:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21c2:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x223e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2240:0x5 DW_TAG_template_type_parameter .long 182 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x21c9:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2247:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 443 # DW_AT_name + .short 442 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x21d0:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21d2:0x5 DW_TAG_template_type_parameter - .long 7278 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x224e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2250:0x5 DW_TAG_template_type_parameter + .long 7381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x21d9:0x5 DW_TAG_pointer_type - .long 8670 # DW_AT_type - .byte 92 # Abbrev [92] 0x21de:0xc DW_TAG_structure_type - .short 444 # DW_AT_name + .byte 47 # Abbrev [47] 0x2257:0x5 DW_TAG_pointer_type + .long 8796 # DW_AT_type + .byte 67 # Abbrev [67] 0x225c:0xc DW_TAG_structure_type + .short 443 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x21e1:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21e3:0x5 DW_TAG_template_type_parameter - .long 7278 # DW_AT_type + .byte 30 # Abbrev [30] 0x225f:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2261:0x5 DW_TAG_template_type_parameter + .long 7381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x21ea:0x5 DW_TAG_pointer_type - .long 8687 # DW_AT_type - .byte 92 # Abbrev [92] 0x21ef:0xc DW_TAG_structure_type - .short 445 # DW_AT_name + .byte 47 # Abbrev [47] 0x2268:0x5 DW_TAG_pointer_type + .long 8813 # DW_AT_type + .byte 67 # Abbrev [67] 0x226d:0xc DW_TAG_structure_type + .short 444 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x21f2:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x21f4:0x5 DW_TAG_template_type_parameter - .long 966 # DW_AT_type + .byte 30 # Abbrev [30] 0x2270:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2272:0x5 DW_TAG_template_type_parameter + .long 371 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x21fb:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2279:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 446 # DW_AT_name + .short 445 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2202:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2204:0x5 DW_TAG_template_type_parameter - .long 7294 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2280:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2282:0x5 DW_TAG_template_type_parameter + .long 7397 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x220b:0x5 DW_TAG_pointer_type - .long 8720 # DW_AT_type - .byte 92 # Abbrev [92] 0x2210:0xc DW_TAG_structure_type - .short 447 # DW_AT_name + .byte 47 # Abbrev [47] 0x2289:0x5 DW_TAG_pointer_type + .long 8846 # DW_AT_type + .byte 67 # Abbrev [67] 0x228e:0xc DW_TAG_structure_type + .short 446 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2213:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2215:0x5 DW_TAG_template_type_parameter - .long 7294 # DW_AT_type + .byte 30 # Abbrev [30] 0x2291:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2293:0x5 DW_TAG_template_type_parameter + .long 7397 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x221c:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x229a:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 448 # DW_AT_name + .short 447 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2223:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2225:0x5 DW_TAG_template_type_parameter - .long 7330 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x22a1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22a3:0x5 DW_TAG_template_type_parameter + .long 7433 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x222c:0x5 DW_TAG_pointer_type - .long 8753 # DW_AT_type - .byte 92 # Abbrev [92] 0x2231:0xc DW_TAG_structure_type - .short 449 # DW_AT_name + .byte 47 # Abbrev [47] 0x22aa:0x5 DW_TAG_pointer_type + .long 8879 # DW_AT_type + .byte 67 # Abbrev [67] 0x22af:0xc DW_TAG_structure_type + .short 448 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2234:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2236:0x5 DW_TAG_template_type_parameter - .long 7330 # DW_AT_type + .byte 30 # Abbrev [30] 0x22b2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22b4:0x5 DW_TAG_template_type_parameter + .long 7433 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x223d:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x22bb:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 450 # DW_AT_name + .short 449 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2244:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2246:0x5 DW_TAG_template_type_parameter - .long 7341 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x22c2:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22c4:0x5 DW_TAG_template_type_parameter + .long 7444 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x224d:0x5 DW_TAG_pointer_type - .long 8786 # DW_AT_type - .byte 92 # Abbrev [92] 0x2252:0xc DW_TAG_structure_type - .short 451 # DW_AT_name + .byte 47 # Abbrev [47] 0x22cb:0x5 DW_TAG_pointer_type + .long 8912 # DW_AT_type + .byte 67 # Abbrev [67] 0x22d0:0xc DW_TAG_structure_type + .short 450 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2255:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2257:0x5 DW_TAG_template_type_parameter - .long 7341 # DW_AT_type + .byte 30 # Abbrev [30] 0x22d3:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22d5:0x5 DW_TAG_template_type_parameter + .long 7444 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x225e:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x22dc:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 452 # DW_AT_name + .short 451 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2265:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2267:0x5 DW_TAG_template_type_parameter - .long 7344 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x22e3:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22e5:0x5 DW_TAG_template_type_parameter + .long 7447 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x226e:0x5 DW_TAG_pointer_type - .long 8819 # DW_AT_type - .byte 92 # Abbrev [92] 0x2273:0xc DW_TAG_structure_type - .short 453 # DW_AT_name + .byte 47 # Abbrev [47] 0x22ec:0x5 DW_TAG_pointer_type + .long 8945 # DW_AT_type + .byte 67 # Abbrev [67] 0x22f1:0xc DW_TAG_structure_type + .short 452 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2276:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2278:0x5 DW_TAG_template_type_parameter - .long 7344 # DW_AT_type + .byte 30 # Abbrev [30] 0x22f4:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x22f6:0x5 DW_TAG_template_type_parameter + .long 7447 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x227f:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x22fd:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 454 # DW_AT_name + .short 453 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2286:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2288:0x5 DW_TAG_template_type_parameter - .long 7352 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2304:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2306:0x5 DW_TAG_template_type_parameter + .long 7455 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x228f:0x5 DW_TAG_pointer_type - .long 8852 # DW_AT_type - .byte 92 # Abbrev [92] 0x2294:0xc DW_TAG_structure_type - .short 455 # DW_AT_name + .byte 47 # Abbrev [47] 0x230d:0x5 DW_TAG_pointer_type + .long 8978 # DW_AT_type + .byte 67 # Abbrev [67] 0x2312:0xc DW_TAG_structure_type + .short 454 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2297:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2299:0x5 DW_TAG_template_type_parameter - .long 7352 # DW_AT_type + .byte 30 # Abbrev [30] 0x2315:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2317:0x5 DW_TAG_template_type_parameter + .long 7455 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x22a0:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x231e:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 456 # DW_AT_name + .short 455 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x22a7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22a9:0x5 DW_TAG_template_type_parameter - .long 7357 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2325:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2327:0x5 DW_TAG_template_type_parameter + .long 7460 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x22b0:0x5 DW_TAG_pointer_type - .long 8885 # DW_AT_type - .byte 92 # Abbrev [92] 0x22b5:0xc DW_TAG_structure_type - .short 457 # DW_AT_name + .byte 47 # Abbrev [47] 0x232e:0x5 DW_TAG_pointer_type + .long 9011 # DW_AT_type + .byte 67 # Abbrev [67] 0x2333:0xc DW_TAG_structure_type + .short 456 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x22b8:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22ba:0x5 DW_TAG_template_type_parameter - .long 7357 # DW_AT_type + .byte 30 # Abbrev [30] 0x2336:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2338:0x5 DW_TAG_template_type_parameter + .long 7460 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x22c1:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x233f:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 458 # DW_AT_name + .short 457 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x22c8:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22ca:0x5 DW_TAG_template_type_parameter + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2346:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2348:0x5 DW_TAG_template_type_parameter .long 72 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x22d1:0x5 DW_TAG_pointer_type - .long 8918 # DW_AT_type - .byte 92 # Abbrev [92] 0x22d6:0xc DW_TAG_structure_type - .short 459 # DW_AT_name + .byte 47 # Abbrev [47] 0x234f:0x5 DW_TAG_pointer_type + .long 9044 # DW_AT_type + .byte 67 # Abbrev [67] 0x2354:0xc DW_TAG_structure_type + .short 458 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x22d9:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22db:0x5 DW_TAG_template_type_parameter + .byte 30 # Abbrev [30] 0x2357:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2359:0x5 DW_TAG_template_type_parameter .long 72 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x22e2:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2360:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 460 # DW_AT_name + .short 459 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x22e9:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22eb:0x5 DW_TAG_template_type_parameter - .long 7367 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2367:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2369:0x5 DW_TAG_template_type_parameter + .long 7470 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x22f2:0x5 DW_TAG_pointer_type - .long 8951 # DW_AT_type - .byte 92 # Abbrev [92] 0x22f7:0xc DW_TAG_structure_type - .short 461 # DW_AT_name + .byte 47 # Abbrev [47] 0x2370:0x5 DW_TAG_pointer_type + .long 9077 # DW_AT_type + .byte 67 # Abbrev [67] 0x2375:0xc DW_TAG_structure_type + .short 460 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x22fa:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x22fc:0x5 DW_TAG_template_type_parameter - .long 7367 # DW_AT_type + .byte 30 # Abbrev [30] 0x2378:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x237a:0x5 DW_TAG_template_type_parameter + .long 7470 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2303:0x15 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2381:0x15 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 462 # DW_AT_name + .short 461 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x230a:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x230c:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0x2311:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2388:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x238a:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0x238f:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2318:0x5 DW_TAG_pointer_type - .long 8989 # DW_AT_type - .byte 92 # Abbrev [92] 0x231d:0x11 DW_TAG_structure_type - .short 463 # DW_AT_name + .byte 47 # Abbrev [47] 0x2396:0x5 DW_TAG_pointer_type + .long 9115 # DW_AT_type + .byte 67 # Abbrev [67] 0x239b:0x11 DW_TAG_structure_type + .short 462 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2320:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2322:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0x2327:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type + .byte 30 # Abbrev [30] 0x239e:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x23a0:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0x23a5:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x232e:0x15 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x23ac:0x15 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 464 # DW_AT_name + .short 463 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2335:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2337:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0x233c:0x5 DW_TAG_template_type_parameter - .long 7375 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x23b3:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x23b5:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0x23ba:0x5 DW_TAG_template_type_parameter + .long 7477 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2343:0x5 DW_TAG_pointer_type - .long 9032 # DW_AT_type - .byte 92 # Abbrev [92] 0x2348:0x11 DW_TAG_structure_type - .short 465 # DW_AT_name + .byte 47 # Abbrev [47] 0x23c1:0x5 DW_TAG_pointer_type + .long 9158 # DW_AT_type + .byte 67 # Abbrev [67] 0x23c6:0x11 DW_TAG_structure_type + .short 464 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x234b:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x234d:0x5 DW_TAG_template_type_parameter - .long 7370 # DW_AT_type - .byte 34 # Abbrev [34] 0x2352:0x5 DW_TAG_template_type_parameter - .long 7375 # DW_AT_type + .byte 30 # Abbrev [30] 0x23c9:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x23cb:0x5 DW_TAG_template_type_parameter + .long 7472 # DW_AT_type + .byte 31 # Abbrev [31] 0x23d0:0x5 DW_TAG_template_type_parameter + .long 7477 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2359:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x23d7:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 466 # DW_AT_name + .short 465 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2360:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2362:0x5 DW_TAG_template_type_parameter - .long 7380 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x23de:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x23e0:0x5 DW_TAG_template_type_parameter + .long 7482 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2369:0x5 DW_TAG_pointer_type - .long 9070 # DW_AT_type - .byte 92 # Abbrev [92] 0x236e:0xc DW_TAG_structure_type - .short 467 # DW_AT_name + .byte 47 # Abbrev [47] 0x23e7:0x5 DW_TAG_pointer_type + .long 9196 # DW_AT_type + .byte 67 # Abbrev [67] 0x23ec:0xc DW_TAG_structure_type + .short 466 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2371:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2373:0x5 DW_TAG_template_type_parameter - .long 7380 # DW_AT_type + .byte 30 # Abbrev [30] 0x23ef:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x23f1:0x5 DW_TAG_template_type_parameter + .long 7482 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x237a:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x23f8:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 468 # DW_AT_name + .short 467 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2381:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2383:0x5 DW_TAG_template_type_parameter - .long 7385 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x23ff:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2401:0x5 DW_TAG_template_type_parameter + .long 7487 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x238a:0x5 DW_TAG_pointer_type - .long 9103 # DW_AT_type - .byte 92 # Abbrev [92] 0x238f:0xc DW_TAG_structure_type - .short 469 # DW_AT_name + .byte 47 # Abbrev [47] 0x2408:0x5 DW_TAG_pointer_type + .long 9229 # DW_AT_type + .byte 67 # Abbrev [67] 0x240d:0xc DW_TAG_structure_type + .short 468 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2392:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2394:0x5 DW_TAG_template_type_parameter - .long 7385 # DW_AT_type + .byte 30 # Abbrev [30] 0x2410:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2412:0x5 DW_TAG_template_type_parameter + .long 7487 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x239b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2419:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 470 # DW_AT_name + .short 469 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x23a2:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23a4:0x5 DW_TAG_template_type_parameter - .long 7401 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2420:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2422:0x5 DW_TAG_template_type_parameter + .long 7503 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x23ab:0x5 DW_TAG_pointer_type - .long 9136 # DW_AT_type - .byte 92 # Abbrev [92] 0x23b0:0xc DW_TAG_structure_type - .short 471 # DW_AT_name + .byte 47 # Abbrev [47] 0x2429:0x5 DW_TAG_pointer_type + .long 9262 # DW_AT_type + .byte 67 # Abbrev [67] 0x242e:0xc DW_TAG_structure_type + .short 470 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x23b3:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23b5:0x5 DW_TAG_template_type_parameter - .long 7401 # DW_AT_type + .byte 30 # Abbrev [30] 0x2431:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2433:0x5 DW_TAG_template_type_parameter + .long 7503 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x23bc:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x243a:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 472 # DW_AT_name + .short 471 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x23c3:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23c5:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2441:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2443:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x23cc:0x5 DW_TAG_pointer_type - .long 9169 # DW_AT_type - .byte 92 # Abbrev [92] 0x23d1:0xc DW_TAG_structure_type - .short 473 # DW_AT_name + .byte 47 # Abbrev [47] 0x244a:0x5 DW_TAG_pointer_type + .long 9295 # DW_AT_type + .byte 67 # Abbrev [67] 0x244f:0xc DW_TAG_structure_type + .short 472 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x23d4:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23d6:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 30 # Abbrev [30] 0x2452:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2454:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x23dd:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x245b:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 474 # DW_AT_name + .short 473 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x23e4:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23e6:0x5 DW_TAG_template_type_parameter - .long 7407 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2462:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2464:0x5 DW_TAG_template_type_parameter + .long 7509 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x23ed:0x5 DW_TAG_pointer_type - .long 9202 # DW_AT_type - .byte 92 # Abbrev [92] 0x23f2:0xc DW_TAG_structure_type - .short 475 # DW_AT_name + .byte 47 # Abbrev [47] 0x246b:0x5 DW_TAG_pointer_type + .long 9328 # DW_AT_type + .byte 67 # Abbrev [67] 0x2470:0xc DW_TAG_structure_type + .short 474 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x23f5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x23f7:0x5 DW_TAG_template_type_parameter - .long 7407 # DW_AT_type + .byte 30 # Abbrev [30] 0x2473:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2475:0x5 DW_TAG_template_type_parameter + .long 7509 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x23fe:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x247c:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 476 # DW_AT_name + .short 475 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2405:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2407:0x5 DW_TAG_template_type_parameter - .long 971 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2483:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2485:0x5 DW_TAG_template_type_parameter + .long 376 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x240e:0x5 DW_TAG_pointer_type - .long 9235 # DW_AT_type - .byte 92 # Abbrev [92] 0x2413:0xc DW_TAG_structure_type - .short 477 # DW_AT_name + .byte 47 # Abbrev [47] 0x248c:0x5 DW_TAG_pointer_type + .long 9361 # DW_AT_type + .byte 67 # Abbrev [67] 0x2491:0xc DW_TAG_structure_type + .short 476 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2416:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2418:0x5 DW_TAG_template_type_parameter - .long 971 # DW_AT_type + .byte 30 # Abbrev [30] 0x2494:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2496:0x5 DW_TAG_template_type_parameter + .long 376 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x241f:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x249d:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 478 # DW_AT_name + .short 477 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2426:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2428:0x5 DW_TAG_template_type_parameter - .long 7412 # DW_AT_type - .byte 0 # End Of Children Mark - .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x242f:0x5 DW_TAG_pointer_type - .long 9268 # DW_AT_type - .byte 92 # Abbrev [92] 0x2434:0xc DW_TAG_structure_type - .short 479 # DW_AT_name - # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2437:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2439:0x5 DW_TAG_template_type_parameter - .long 7412 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x24a4:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x24a6:0x5 DW_TAG_template_type_parameter + .long 7514 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2440:0x5 DW_TAG_pointer_type - .long 9285 # DW_AT_type - .byte 92 # Abbrev [92] 0x2445:0x6 DW_TAG_structure_type - .short 480 # DW_AT_name + .byte 47 # Abbrev [47] 0x24ad:0x5 DW_TAG_pointer_type + .long 9394 # DW_AT_type + .byte 67 # Abbrev [67] 0x24b2:0xc DW_TAG_structure_type + .short 478 # DW_AT_name # DW_AT_declaration - .byte 50 # Abbrev [50] 0x2448:0x2 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x244b:0x15 DW_TAG_structure_type - .byte 5 # DW_AT_calling_convention - .short 481 # DW_AT_name - .byte 1 # DW_AT_byte_size - .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2452:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2454:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type - .byte 34 # Abbrev [34] 0x2459:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type + .byte 30 # Abbrev [30] 0x24b5:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x24b7:0x5 DW_TAG_template_type_parameter + .long 7514 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2460:0x5 DW_TAG_pointer_type - .long 9317 # DW_AT_type - .byte 92 # Abbrev [92] 0x2465:0x11 DW_TAG_structure_type - .short 482 # DW_AT_name + .byte 47 # Abbrev [47] 0x24be:0x5 DW_TAG_pointer_type + .long 9411 # DW_AT_type + .byte 67 # Abbrev [67] 0x24c3:0x6 DW_TAG_structure_type + .short 479 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2468:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x246a:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type - .byte 34 # Abbrev [34] 0x246f:0x5 DW_TAG_template_type_parameter - .long 7395 # DW_AT_type - .byte 0 # End Of Children Mark + .byte 44 # Abbrev [44] 0x24c6:0x2 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2476:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x24c9:0x15 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 483 # DW_AT_name + .short 480 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x247d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x247f:0x5 DW_TAG_template_type_parameter - .long 7417 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x24d0:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x24d2:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type + .byte 31 # Abbrev [31] 0x24d7:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2486:0x5 DW_TAG_pointer_type - .long 9355 # DW_AT_type - .byte 92 # Abbrev [92] 0x248b:0xc DW_TAG_structure_type - .short 484 # DW_AT_name + .byte 47 # Abbrev [47] 0x24de:0x5 DW_TAG_pointer_type + .long 9443 # DW_AT_type + .byte 67 # Abbrev [67] 0x24e3:0x11 DW_TAG_structure_type + .short 481 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x248e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2490:0x5 DW_TAG_template_type_parameter - .long 7417 # DW_AT_type + .byte 30 # Abbrev [30] 0x24e6:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x24e8:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type + .byte 31 # Abbrev [31] 0x24ed:0x5 DW_TAG_template_type_parameter + .long 7497 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2497:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x24f4:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 485 # DW_AT_name + .short 482 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x249e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24a0:0x5 DW_TAG_template_type_parameter - .long 7438 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x24fb:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x24fd:0x5 DW_TAG_template_type_parameter + .long 7519 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x24a7:0x5 DW_TAG_pointer_type - .long 9388 # DW_AT_type - .byte 92 # Abbrev [92] 0x24ac:0xc DW_TAG_structure_type - .short 486 # DW_AT_name + .byte 47 # Abbrev [47] 0x2504:0x5 DW_TAG_pointer_type + .long 9481 # DW_AT_type + .byte 67 # Abbrev [67] 0x2509:0xc DW_TAG_structure_type + .short 483 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x24af:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24b1:0x5 DW_TAG_template_type_parameter - .long 7438 # DW_AT_type + .byte 30 # Abbrev [30] 0x250c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x250e:0x5 DW_TAG_template_type_parameter + .long 7519 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x24b8:0x5 DW_TAG_pointer_type - .long 3851 # DW_AT_type - .byte 76 # Abbrev [76] 0x24bd:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2515:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 488 # DW_AT_name + .short 484 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x24c4:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24c6:0x5 DW_TAG_template_type_parameter - .long 976 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x251c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x251e:0x5 DW_TAG_template_type_parameter + .long 7540 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x24cd:0x5 DW_TAG_pointer_type - .long 9426 # DW_AT_type - .byte 92 # Abbrev [92] 0x24d2:0xc DW_TAG_structure_type - .short 489 # DW_AT_name + .byte 47 # Abbrev [47] 0x2525:0x5 DW_TAG_pointer_type + .long 9514 # DW_AT_type + .byte 67 # Abbrev [67] 0x252a:0xc DW_TAG_structure_type + .short 485 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x24d5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24d7:0x5 DW_TAG_template_type_parameter - .long 976 # DW_AT_type + .byte 30 # Abbrev [30] 0x252d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x252f:0x5 DW_TAG_template_type_parameter + .long 7540 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x24de:0x10 DW_TAG_structure_type + .byte 47 # Abbrev [47] 0x2536:0x5 DW_TAG_pointer_type + .long 3243 # DW_AT_type + .byte 84 # Abbrev [84] 0x253b:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 490 # DW_AT_name + .short 487 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x24e5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24e7:0x5 DW_TAG_template_type_parameter - .long 7449 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2542:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2544:0x5 DW_TAG_template_type_parameter + .long 381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x24ee:0x5 DW_TAG_pointer_type - .long 9459 # DW_AT_type - .byte 92 # Abbrev [92] 0x24f3:0xc DW_TAG_structure_type - .short 491 # DW_AT_name + .byte 47 # Abbrev [47] 0x254b:0x5 DW_TAG_pointer_type + .long 9552 # DW_AT_type + .byte 67 # Abbrev [67] 0x2550:0xc DW_TAG_structure_type + .short 488 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x24f6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x24f8:0x5 DW_TAG_template_type_parameter - .long 7449 # DW_AT_type + .byte 30 # Abbrev [30] 0x2553:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2555:0x5 DW_TAG_template_type_parameter + .long 381 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x24ff:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x255c:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 492 # DW_AT_name + .short 489 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2506:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2508:0x5 DW_TAG_template_type_parameter - .long 7454 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2563:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2565:0x5 DW_TAG_template_type_parameter + .long 7551 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x250f:0x5 DW_TAG_pointer_type - .long 9492 # DW_AT_type - .byte 92 # Abbrev [92] 0x2514:0xc DW_TAG_structure_type - .short 493 # DW_AT_name + .byte 47 # Abbrev [47] 0x256c:0x5 DW_TAG_pointer_type + .long 9585 # DW_AT_type + .byte 67 # Abbrev [67] 0x2571:0xc DW_TAG_structure_type + .short 490 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2517:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2519:0x5 DW_TAG_template_type_parameter - .long 7454 # DW_AT_type + .byte 30 # Abbrev [30] 0x2574:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2576:0x5 DW_TAG_template_type_parameter + .long 7551 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2520:0x15 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x257d:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 494 # DW_AT_name + .short 491 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2527:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2529:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type - .byte 34 # Abbrev [34] 0x252e:0x5 DW_TAG_template_type_parameter - .long 7459 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2584:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2586:0x5 DW_TAG_template_type_parameter + .long 7556 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2535:0x5 DW_TAG_pointer_type - .long 9530 # DW_AT_type - .byte 92 # Abbrev [92] 0x253a:0x11 DW_TAG_structure_type - .short 495 # DW_AT_name + .byte 47 # Abbrev [47] 0x258d:0x5 DW_TAG_pointer_type + .long 9618 # DW_AT_type + .byte 67 # Abbrev [67] 0x2592:0xc DW_TAG_structure_type + .short 492 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x253d:0xd DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x253f:0x5 DW_TAG_template_type_parameter - .long 7225 # DW_AT_type - .byte 34 # Abbrev [34] 0x2544:0x5 DW_TAG_template_type_parameter - .long 7459 # DW_AT_type + .byte 30 # Abbrev [30] 0x2595:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2597:0x5 DW_TAG_template_type_parameter + .long 7556 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x254b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x259e:0x15 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 496 # DW_AT_name + .short 493 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2552:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2554:0x5 DW_TAG_template_type_parameter - .long 7464 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x25a5:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25a7:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type + .byte 31 # Abbrev [31] 0x25ac:0x5 DW_TAG_template_type_parameter + .long 7561 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x255b:0x5 DW_TAG_pointer_type - .long 9568 # DW_AT_type - .byte 92 # Abbrev [92] 0x2560:0xc DW_TAG_structure_type - .short 497 # DW_AT_name + .byte 47 # Abbrev [47] 0x25b3:0x5 DW_TAG_pointer_type + .long 9656 # DW_AT_type + .byte 67 # Abbrev [67] 0x25b8:0x11 DW_TAG_structure_type + .short 494 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2563:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2565:0x5 DW_TAG_template_type_parameter - .long 7464 # DW_AT_type + .byte 30 # Abbrev [30] 0x25bb:0xd DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25bd:0x5 DW_TAG_template_type_parameter + .long 7328 # DW_AT_type + .byte 31 # Abbrev [31] 0x25c2:0x5 DW_TAG_template_type_parameter + .long 7561 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x256c:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x25c9:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 498 # DW_AT_name + .short 495 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2573:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2575:0x5 DW_TAG_template_type_parameter - .long 7478 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x25d0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25d2:0x5 DW_TAG_template_type_parameter + .long 7566 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x257c:0x5 DW_TAG_pointer_type - .long 9601 # DW_AT_type - .byte 92 # Abbrev [92] 0x2581:0xc DW_TAG_structure_type - .short 499 # DW_AT_name + .byte 47 # Abbrev [47] 0x25d9:0x5 DW_TAG_pointer_type + .long 9694 # DW_AT_type + .byte 67 # Abbrev [67] 0x25de:0xc DW_TAG_structure_type + .short 496 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2584:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2586:0x5 DW_TAG_template_type_parameter - .long 7478 # DW_AT_type + .byte 30 # Abbrev [30] 0x25e1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25e3:0x5 DW_TAG_template_type_parameter + .long 7566 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x258d:0x1a DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x25ea:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 500 # DW_AT_name + .short 497 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2594:0x12 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2596:0x5 DW_TAG_template_type_parameter - .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x259b:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type - .byte 34 # Abbrev [34] 0x25a0:0x5 DW_TAG_template_type_parameter - .long 7483 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x25f1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x25f3:0x5 DW_TAG_template_type_parameter + .long 7580 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x25a7:0x5 DW_TAG_pointer_type - .long 9644 # DW_AT_type - .byte 92 # Abbrev [92] 0x25ac:0x16 DW_TAG_structure_type - .short 501 # DW_AT_name + .byte 47 # Abbrev [47] 0x25fa:0x5 DW_TAG_pointer_type + .long 9727 # DW_AT_type + .byte 67 # Abbrev [67] 0x25ff:0xc DW_TAG_structure_type + .short 498 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x25af:0x12 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x25b1:0x5 DW_TAG_template_type_parameter - .long 54 # DW_AT_type - .byte 34 # Abbrev [34] 0x25b6:0x5 DW_TAG_template_type_parameter - .long 505 # DW_AT_type - .byte 34 # Abbrev [34] 0x25bb:0x5 DW_TAG_template_type_parameter - .long 7483 # DW_AT_type + .byte 30 # Abbrev [30] 0x2602:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2604:0x5 DW_TAG_template_type_parameter + .long 7580 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x25c2:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x260b:0x1a DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 502 # DW_AT_name + .short 499 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x25c9:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x25cb:0x5 DW_TAG_template_type_parameter - .long 7488 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2612:0x12 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2614:0x5 DW_TAG_template_type_parameter + .long 54 # DW_AT_type + .byte 31 # Abbrev [31] 0x2619:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type + .byte 31 # Abbrev [31] 0x261e:0x5 DW_TAG_template_type_parameter + .long 7585 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x25d2:0x5 DW_TAG_pointer_type - .long 9687 # DW_AT_type - .byte 92 # Abbrev [92] 0x25d7:0xc DW_TAG_structure_type - .short 503 # DW_AT_name + .byte 47 # Abbrev [47] 0x2625:0x5 DW_TAG_pointer_type + .long 9770 # DW_AT_type + .byte 67 # Abbrev [67] 0x262a:0x16 DW_TAG_structure_type + .short 500 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x25da:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x25dc:0x5 DW_TAG_template_type_parameter - .long 7488 # DW_AT_type + .byte 30 # Abbrev [30] 0x262d:0x12 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x262f:0x5 DW_TAG_template_type_parameter + .long 54 # DW_AT_type + .byte 31 # Abbrev [31] 0x2634:0x5 DW_TAG_template_type_parameter + .long 7072 # DW_AT_type + .byte 31 # Abbrev [31] 0x2639:0x5 DW_TAG_template_type_parameter + .long 7585 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x25e3:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2640:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 504 # DW_AT_name + .short 501 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x25ea:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x25ec:0x5 DW_TAG_template_type_parameter - .long 7500 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2647:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2649:0x5 DW_TAG_template_type_parameter + .long 7590 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x25f3:0x5 DW_TAG_pointer_type - .long 9720 # DW_AT_type - .byte 92 # Abbrev [92] 0x25f8:0xc DW_TAG_structure_type - .short 505 # DW_AT_name + .byte 47 # Abbrev [47] 0x2650:0x5 DW_TAG_pointer_type + .long 9813 # DW_AT_type + .byte 67 # Abbrev [67] 0x2655:0xc DW_TAG_structure_type + .short 502 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x25fb:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x25fd:0x5 DW_TAG_template_type_parameter - .long 7500 # DW_AT_type + .byte 30 # Abbrev [30] 0x2658:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x265a:0x5 DW_TAG_template_type_parameter + .long 7590 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2604:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2661:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 506 # DW_AT_name + .short 503 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x260b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x260d:0x5 DW_TAG_template_type_parameter - .long 7510 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2668:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x266a:0x5 DW_TAG_template_type_parameter + .long 7602 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2614:0x5 DW_TAG_pointer_type - .long 9753 # DW_AT_type - .byte 92 # Abbrev [92] 0x2619:0xc DW_TAG_structure_type - .short 507 # DW_AT_name + .byte 47 # Abbrev [47] 0x2671:0x5 DW_TAG_pointer_type + .long 9846 # DW_AT_type + .byte 67 # Abbrev [67] 0x2676:0xc DW_TAG_structure_type + .short 504 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x261c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x261e:0x5 DW_TAG_template_type_parameter - .long 7510 # DW_AT_type + .byte 30 # Abbrev [30] 0x2679:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x267b:0x5 DW_TAG_template_type_parameter + .long 7602 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2625:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2682:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 508 # DW_AT_name + .short 505 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x262c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x262e:0x5 DW_TAG_template_type_parameter - .long 7516 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2689:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x268b:0x5 DW_TAG_template_type_parameter + .long 7612 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2635:0x5 DW_TAG_pointer_type - .long 9786 # DW_AT_type - .byte 92 # Abbrev [92] 0x263a:0xc DW_TAG_structure_type - .short 509 # DW_AT_name + .byte 47 # Abbrev [47] 0x2692:0x5 DW_TAG_pointer_type + .long 9879 # DW_AT_type + .byte 67 # Abbrev [67] 0x2697:0xc DW_TAG_structure_type + .short 506 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x263d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x263f:0x5 DW_TAG_template_type_parameter - .long 7516 # DW_AT_type + .byte 30 # Abbrev [30] 0x269a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x269c:0x5 DW_TAG_template_type_parameter + .long 7612 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2646:0x5 DW_TAG_pointer_type - .long 206 # DW_AT_type - .byte 76 # Abbrev [76] 0x264b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x26a3:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 510 # DW_AT_name + .short 507 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2652:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2654:0x5 DW_TAG_template_type_parameter - .long 7532 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x26aa:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x26ac:0x5 DW_TAG_template_type_parameter + .long 7618 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x265b:0x5 DW_TAG_pointer_type - .long 9824 # DW_AT_type - .byte 92 # Abbrev [92] 0x2660:0xc DW_TAG_structure_type - .short 511 # DW_AT_name + .byte 47 # Abbrev [47] 0x26b3:0x5 DW_TAG_pointer_type + .long 9912 # DW_AT_type + .byte 67 # Abbrev [67] 0x26b8:0xc DW_TAG_structure_type + .short 508 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2663:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2665:0x5 DW_TAG_template_type_parameter - .long 7532 # DW_AT_type + .byte 30 # Abbrev [30] 0x26bb:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x26bd:0x5 DW_TAG_template_type_parameter + .long 7618 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x266c:0x10 DW_TAG_structure_type + .byte 47 # Abbrev [47] 0x26c4:0x5 DW_TAG_pointer_type + .long 206 # DW_AT_type + .byte 84 # Abbrev [84] 0x26c9:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 512 # DW_AT_name + .short 509 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2673:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2675:0x5 DW_TAG_template_type_parameter - .long 7558 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x26d0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x26d2:0x5 DW_TAG_template_type_parameter + .long 7634 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x267c:0x5 DW_TAG_pointer_type - .long 9857 # DW_AT_type - .byte 92 # Abbrev [92] 0x2681:0xc DW_TAG_structure_type - .short 513 # DW_AT_name + .byte 47 # Abbrev [47] 0x26d9:0x5 DW_TAG_pointer_type + .long 9950 # DW_AT_type + .byte 67 # Abbrev [67] 0x26de:0xc DW_TAG_structure_type + .short 510 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2684:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2686:0x5 DW_TAG_template_type_parameter - .long 7558 # DW_AT_type + .byte 30 # Abbrev [30] 0x26e1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x26e3:0x5 DW_TAG_template_type_parameter + .long 7634 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x268d:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x26ea:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 514 # DW_AT_name + .short 511 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2694:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2696:0x5 DW_TAG_template_type_parameter - .long 7584 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x26f1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x26f3:0x5 DW_TAG_template_type_parameter + .long 7660 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x269d:0x5 DW_TAG_pointer_type - .long 9890 # DW_AT_type - .byte 92 # Abbrev [92] 0x26a2:0xc DW_TAG_structure_type - .short 515 # DW_AT_name + .byte 47 # Abbrev [47] 0x26fa:0x5 DW_TAG_pointer_type + .long 9983 # DW_AT_type + .byte 67 # Abbrev [67] 0x26ff:0xc DW_TAG_structure_type + .short 512 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x26a5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26a7:0x5 DW_TAG_template_type_parameter - .long 7584 # DW_AT_type + .byte 30 # Abbrev [30] 0x2702:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2704:0x5 DW_TAG_template_type_parameter + .long 7660 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x26ae:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x270b:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 516 # DW_AT_name + .short 513 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x26b5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26b7:0x5 DW_TAG_template_type_parameter - .long 7610 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2712:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2714:0x5 DW_TAG_template_type_parameter + .long 7686 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x26be:0x5 DW_TAG_pointer_type - .long 9923 # DW_AT_type - .byte 92 # Abbrev [92] 0x26c3:0xc DW_TAG_structure_type - .short 517 # DW_AT_name + .byte 47 # Abbrev [47] 0x271b:0x5 DW_TAG_pointer_type + .long 10016 # DW_AT_type + .byte 67 # Abbrev [67] 0x2720:0xc DW_TAG_structure_type + .short 514 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x26c6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26c8:0x5 DW_TAG_template_type_parameter - .long 7610 # DW_AT_type + .byte 30 # Abbrev [30] 0x2723:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2725:0x5 DW_TAG_template_type_parameter + .long 7686 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x26cf:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x272c:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 518 # DW_AT_name + .short 515 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x26d6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26d8:0x5 DW_TAG_template_type_parameter - .long 7615 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2733:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2735:0x5 DW_TAG_template_type_parameter + .long 7712 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x26df:0x5 DW_TAG_pointer_type - .long 9956 # DW_AT_type - .byte 92 # Abbrev [92] 0x26e4:0xc DW_TAG_structure_type - .short 519 # DW_AT_name + .byte 47 # Abbrev [47] 0x273c:0x5 DW_TAG_pointer_type + .long 10049 # DW_AT_type + .byte 67 # Abbrev [67] 0x2741:0xc DW_TAG_structure_type + .short 516 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x26e7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26e9:0x5 DW_TAG_template_type_parameter - .long 7615 # DW_AT_type + .byte 30 # Abbrev [30] 0x2744:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2746:0x5 DW_TAG_template_type_parameter + .long 7712 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x26f0:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x274d:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 520 # DW_AT_name + .short 517 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x26f7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x26f9:0x5 DW_TAG_template_type_parameter - .long 7637 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2754:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2756:0x5 DW_TAG_template_type_parameter + .long 7717 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2700:0x5 DW_TAG_pointer_type - .long 9989 # DW_AT_type - .byte 92 # Abbrev [92] 0x2705:0xc DW_TAG_structure_type - .short 521 # DW_AT_name + .byte 47 # Abbrev [47] 0x275d:0x5 DW_TAG_pointer_type + .long 10082 # DW_AT_type + .byte 67 # Abbrev [67] 0x2762:0xc DW_TAG_structure_type + .short 518 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2708:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x270a:0x5 DW_TAG_template_type_parameter - .long 7637 # DW_AT_type + .byte 30 # Abbrev [30] 0x2765:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2767:0x5 DW_TAG_template_type_parameter + .long 7717 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2711:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x276e:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 522 # DW_AT_name + .short 519 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2718:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x271a:0x5 DW_TAG_template_type_parameter - .long 7643 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2775:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2777:0x5 DW_TAG_template_type_parameter + .long 7739 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2721:0x5 DW_TAG_pointer_type - .long 10022 # DW_AT_type - .byte 92 # Abbrev [92] 0x2726:0xc DW_TAG_structure_type - .short 523 # DW_AT_name + .byte 47 # Abbrev [47] 0x277e:0x5 DW_TAG_pointer_type + .long 10115 # DW_AT_type + .byte 67 # Abbrev [67] 0x2783:0xc DW_TAG_structure_type + .short 520 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2729:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x272b:0x5 DW_TAG_template_type_parameter - .long 7643 # DW_AT_type + .byte 30 # Abbrev [30] 0x2786:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2788:0x5 DW_TAG_template_type_parameter + .long 7739 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2732:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x278f:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 524 # DW_AT_name + .short 521 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2739:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x273b:0x5 DW_TAG_template_type_parameter - .long 7649 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2796:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2798:0x5 DW_TAG_template_type_parameter + .long 7745 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2742:0x5 DW_TAG_pointer_type - .long 10055 # DW_AT_type - .byte 92 # Abbrev [92] 0x2747:0xc DW_TAG_structure_type - .short 525 # DW_AT_name + .byte 47 # Abbrev [47] 0x279f:0x5 DW_TAG_pointer_type + .long 10148 # DW_AT_type + .byte 67 # Abbrev [67] 0x27a4:0xc DW_TAG_structure_type + .short 522 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x274a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x274c:0x5 DW_TAG_template_type_parameter - .long 7649 # DW_AT_type + .byte 30 # Abbrev [30] 0x27a7:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27a9:0x5 DW_TAG_template_type_parameter + .long 7745 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2753:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x27b0:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 526 # DW_AT_name + .short 523 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x275a:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x275c:0x5 DW_TAG_template_type_parameter - .long 7659 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x27b7:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27b9:0x5 DW_TAG_template_type_parameter + .long 7751 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2763:0x5 DW_TAG_pointer_type - .long 10088 # DW_AT_type - .byte 92 # Abbrev [92] 0x2768:0xc DW_TAG_structure_type - .short 527 # DW_AT_name + .byte 47 # Abbrev [47] 0x27c0:0x5 DW_TAG_pointer_type + .long 10181 # DW_AT_type + .byte 67 # Abbrev [67] 0x27c5:0xc DW_TAG_structure_type + .short 524 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x276b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x276d:0x5 DW_TAG_template_type_parameter - .long 7659 # DW_AT_type + .byte 30 # Abbrev [30] 0x27c8:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27ca:0x5 DW_TAG_template_type_parameter + .long 7751 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2774:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x27d1:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 528 # DW_AT_name + .short 525 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x277b:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x277d:0x5 DW_TAG_template_type_parameter - .long 7676 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x27d8:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27da:0x5 DW_TAG_template_type_parameter + .long 7761 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2784:0x5 DW_TAG_pointer_type - .long 10121 # DW_AT_type - .byte 92 # Abbrev [92] 0x2789:0xc DW_TAG_structure_type - .short 529 # DW_AT_name + .byte 47 # Abbrev [47] 0x27e1:0x5 DW_TAG_pointer_type + .long 10214 # DW_AT_type + .byte 67 # Abbrev [67] 0x27e6:0xc DW_TAG_structure_type + .short 526 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x278c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x278e:0x5 DW_TAG_template_type_parameter - .long 7676 # DW_AT_type + .byte 30 # Abbrev [30] 0x27e9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27eb:0x5 DW_TAG_template_type_parameter + .long 7761 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2795:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x27f2:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 530 # DW_AT_name + .short 527 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x279c:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x279e:0x5 DW_TAG_template_type_parameter - .long 7681 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x27f9:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x27fb:0x5 DW_TAG_template_type_parameter + .long 7778 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x27a5:0x5 DW_TAG_pointer_type - .long 10154 # DW_AT_type - .byte 92 # Abbrev [92] 0x27aa:0xc DW_TAG_structure_type - .short 531 # DW_AT_name + .byte 47 # Abbrev [47] 0x2802:0x5 DW_TAG_pointer_type + .long 10247 # DW_AT_type + .byte 67 # Abbrev [67] 0x2807:0xc DW_TAG_structure_type + .short 528 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x27ad:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x27af:0x5 DW_TAG_template_type_parameter - .long 7681 # DW_AT_type + .byte 30 # Abbrev [30] 0x280a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x280c:0x5 DW_TAG_template_type_parameter + .long 7778 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x27b6:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2813:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 532 # DW_AT_name + .short 529 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x27bd:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x27bf:0x5 DW_TAG_template_type_parameter - .long 7712 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x281a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x281c:0x5 DW_TAG_template_type_parameter + .long 7783 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x27c6:0x5 DW_TAG_pointer_type - .long 10187 # DW_AT_type - .byte 92 # Abbrev [92] 0x27cb:0xc DW_TAG_structure_type - .short 533 # DW_AT_name + .byte 47 # Abbrev [47] 0x2823:0x5 DW_TAG_pointer_type + .long 10280 # DW_AT_type + .byte 67 # Abbrev [67] 0x2828:0xc DW_TAG_structure_type + .short 530 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x27ce:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x27d0:0x5 DW_TAG_template_type_parameter - .long 7712 # DW_AT_type + .byte 30 # Abbrev [30] 0x282b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x282d:0x5 DW_TAG_template_type_parameter + .long 7783 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x27d7:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2834:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 534 # DW_AT_name + .short 531 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x27de:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x27e0:0x5 DW_TAG_template_type_parameter - .long 7735 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x283b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x283d:0x5 DW_TAG_template_type_parameter + .long 7814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x27e7:0x5 DW_TAG_pointer_type - .long 10220 # DW_AT_type - .byte 92 # Abbrev [92] 0x27ec:0xc DW_TAG_structure_type - .short 535 # DW_AT_name + .byte 47 # Abbrev [47] 0x2844:0x5 DW_TAG_pointer_type + .long 10313 # DW_AT_type + .byte 67 # Abbrev [67] 0x2849:0xc DW_TAG_structure_type + .short 532 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x27ef:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x27f1:0x5 DW_TAG_template_type_parameter - .long 7735 # DW_AT_type + .byte 30 # Abbrev [30] 0x284c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x284e:0x5 DW_TAG_template_type_parameter + .long 7814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x27f8:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2855:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 536 # DW_AT_name + .short 533 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x27ff:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2801:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x285c:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x285e:0x5 DW_TAG_template_type_parameter + .long 7837 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2808:0x5 DW_TAG_pointer_type - .long 10253 # DW_AT_type - .byte 92 # Abbrev [92] 0x280d:0xc DW_TAG_structure_type - .short 537 # DW_AT_name + .byte 47 # Abbrev [47] 0x2865:0x5 DW_TAG_pointer_type + .long 10346 # DW_AT_type + .byte 67 # Abbrev [67] 0x286a:0xc DW_TAG_structure_type + .short 534 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2810:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2812:0x5 DW_TAG_template_type_parameter - .long 7402 # DW_AT_type + .byte 30 # Abbrev [30] 0x286d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x286f:0x5 DW_TAG_template_type_parameter + .long 7837 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2819:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2876:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 538 # DW_AT_name + .short 535 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2820:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2822:0x5 DW_TAG_template_type_parameter - .long 7747 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x287d:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x287f:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2829:0x5 DW_TAG_pointer_type - .long 10286 # DW_AT_type - .byte 92 # Abbrev [92] 0x282e:0xc DW_TAG_structure_type - .short 539 # DW_AT_name + .byte 47 # Abbrev [47] 0x2886:0x5 DW_TAG_pointer_type + .long 10379 # DW_AT_type + .byte 67 # Abbrev [67] 0x288b:0xc DW_TAG_structure_type + .short 536 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2831:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2833:0x5 DW_TAG_template_type_parameter - .long 7747 # DW_AT_type + .byte 30 # Abbrev [30] 0x288e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2890:0x5 DW_TAG_template_type_parameter + .long 7504 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x283a:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x2897:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 540 # DW_AT_name + .short 537 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2841:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2843:0x5 DW_TAG_template_type_parameter - .long 7754 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x289e:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28a0:0x5 DW_TAG_template_type_parameter + .long 7849 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x284a:0x5 DW_TAG_pointer_type - .long 10319 # DW_AT_type - .byte 92 # Abbrev [92] 0x284f:0xc DW_TAG_structure_type - .short 541 # DW_AT_name + .byte 47 # Abbrev [47] 0x28a7:0x5 DW_TAG_pointer_type + .long 10412 # DW_AT_type + .byte 67 # Abbrev [67] 0x28ac:0xc DW_TAG_structure_type + .short 538 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2852:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2854:0x5 DW_TAG_template_type_parameter - .long 7754 # DW_AT_type + .byte 30 # Abbrev [30] 0x28af:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28b1:0x5 DW_TAG_template_type_parameter + .long 7849 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x285b:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x28b8:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 542 # DW_AT_name + .short 539 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2862:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2864:0x5 DW_TAG_template_type_parameter - .long 7766 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x28bf:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28c1:0x5 DW_TAG_template_type_parameter + .long 7856 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x286b:0x5 DW_TAG_pointer_type - .long 10352 # DW_AT_type - .byte 92 # Abbrev [92] 0x2870:0xc DW_TAG_structure_type - .short 543 # DW_AT_name + .byte 47 # Abbrev [47] 0x28c8:0x5 DW_TAG_pointer_type + .long 10445 # DW_AT_type + .byte 67 # Abbrev [67] 0x28cd:0xc DW_TAG_structure_type + .short 540 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2873:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2875:0x5 DW_TAG_template_type_parameter - .long 7766 # DW_AT_type + .byte 30 # Abbrev [30] 0x28d0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28d2:0x5 DW_TAG_template_type_parameter + .long 7856 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x287c:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x28d9:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 544 # DW_AT_name + .short 541 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2883:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2885:0x5 DW_TAG_template_type_parameter - .long 7773 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x28e0:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28e2:0x5 DW_TAG_template_type_parameter + .long 7868 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x288c:0x5 DW_TAG_pointer_type - .long 10385 # DW_AT_type - .byte 92 # Abbrev [92] 0x2891:0xc DW_TAG_structure_type - .short 545 # DW_AT_name + .byte 47 # Abbrev [47] 0x28e9:0x5 DW_TAG_pointer_type + .long 10478 # DW_AT_type + .byte 67 # Abbrev [67] 0x28ee:0xc DW_TAG_structure_type + .short 542 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2894:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2896:0x5 DW_TAG_template_type_parameter - .long 7773 # DW_AT_type + .byte 30 # Abbrev [30] 0x28f1:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x28f3:0x5 DW_TAG_template_type_parameter + .long 7868 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x289d:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x28fa:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 546 # DW_AT_name + .short 543 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x28a4:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28a6:0x5 DW_TAG_template_type_parameter - .long 7778 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2901:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2903:0x5 DW_TAG_template_type_parameter + .long 7909 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x28ad:0x5 DW_TAG_pointer_type - .long 10418 # DW_AT_type - .byte 92 # Abbrev [92] 0x28b2:0xc DW_TAG_structure_type - .short 547 # DW_AT_name + .byte 47 # Abbrev [47] 0x290a:0x5 DW_TAG_pointer_type + .long 10511 # DW_AT_type + .byte 67 # Abbrev [67] 0x290f:0xc DW_TAG_structure_type + .short 544 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x28b5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28b7:0x5 DW_TAG_template_type_parameter - .long 7778 # DW_AT_type + .byte 30 # Abbrev [30] 0x2912:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2914:0x5 DW_TAG_template_type_parameter + .long 7909 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x28be:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x291b:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 548 # DW_AT_name + .short 545 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x28c5:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28c7:0x5 DW_TAG_template_type_parameter - .long 7788 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2922:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2924:0x5 DW_TAG_template_type_parameter + .long 7931 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x28ce:0x5 DW_TAG_pointer_type - .long 10451 # DW_AT_type - .byte 92 # Abbrev [92] 0x28d3:0xc DW_TAG_structure_type - .short 549 # DW_AT_name + .byte 47 # Abbrev [47] 0x292b:0x5 DW_TAG_pointer_type + .long 10544 # DW_AT_type + .byte 67 # Abbrev [67] 0x2930:0xc DW_TAG_structure_type + .short 546 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x28d6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28d8:0x5 DW_TAG_template_type_parameter - .long 7788 # DW_AT_type + .byte 30 # Abbrev [30] 0x2933:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2935:0x5 DW_TAG_template_type_parameter + .long 7931 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x28df:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x293c:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 550 # DW_AT_name + .short 547 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x28e6:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28e8:0x5 DW_TAG_template_type_parameter - .long 7810 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2943:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2945:0x5 DW_TAG_template_type_parameter + .long 7940 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x28ef:0x5 DW_TAG_pointer_type - .long 10484 # DW_AT_type - .byte 92 # Abbrev [92] 0x28f4:0xc DW_TAG_structure_type - .short 551 # DW_AT_name + .byte 47 # Abbrev [47] 0x294c:0x5 DW_TAG_pointer_type + .long 10577 # DW_AT_type + .byte 67 # Abbrev [67] 0x2951:0xc DW_TAG_structure_type + .short 548 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x28f7:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x28f9:0x5 DW_TAG_template_type_parameter - .long 7810 # DW_AT_type + .byte 30 # Abbrev [30] 0x2954:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2956:0x5 DW_TAG_template_type_parameter + .long 7940 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2900:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x295d:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 552 # DW_AT_name + .short 549 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x2907:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2909:0x5 DW_TAG_template_type_parameter - .long 7819 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x2964:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2966:0x5 DW_TAG_template_type_parameter + .long 7942 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2910:0x5 DW_TAG_pointer_type - .long 10517 # DW_AT_type - .byte 92 # Abbrev [92] 0x2915:0xc DW_TAG_structure_type - .short 553 # DW_AT_name + .byte 47 # Abbrev [47] 0x296d:0x5 DW_TAG_pointer_type + .long 10610 # DW_AT_type + .byte 67 # Abbrev [67] 0x2972:0xc DW_TAG_structure_type + .short 550 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x2918:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x291a:0x5 DW_TAG_template_type_parameter - .long 7819 # DW_AT_type + .byte 30 # Abbrev [30] 0x2975:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x2977:0x5 DW_TAG_template_type_parameter + .long 7942 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2921:0x5 DW_TAG_pointer_type - .long 7039 # DW_AT_type - .byte 76 # Abbrev [76] 0x2926:0x10 DW_TAG_structure_type + .byte 47 # Abbrev [47] 0x297e:0x5 DW_TAG_pointer_type + .long 6762 # DW_AT_type + .byte 84 # Abbrev [84] 0x2983:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 488 # DW_AT_name + .short 487 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x292d:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x292f:0x5 DW_TAG_template_type_parameter - .long 7091 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x298a:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x298c:0x5 DW_TAG_template_type_parameter + .long 6814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2936:0x5 DW_TAG_pointer_type - .long 10555 # DW_AT_type - .byte 92 # Abbrev [92] 0x293b:0xc DW_TAG_structure_type - .short 489 # DW_AT_name + .byte 47 # Abbrev [47] 0x2993:0x5 DW_TAG_pointer_type + .long 10648 # DW_AT_type + .byte 67 # Abbrev [67] 0x2998:0xc DW_TAG_structure_type + .short 488 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x293e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2940:0x5 DW_TAG_template_type_parameter - .long 7091 # DW_AT_type + .byte 30 # Abbrev [30] 0x299b:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x299d:0x5 DW_TAG_template_type_parameter + .long 6814 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 76 # Abbrev [76] 0x2947:0x10 DW_TAG_structure_type + .byte 84 # Abbrev [84] 0x29a4:0x10 DW_TAG_structure_type .byte 5 # DW_AT_calling_convention - .short 554 # DW_AT_name + .short 551 # DW_AT_name .byte 1 # DW_AT_byte_size .byte 0 # DW_AT_decl_file - .byte 12 # DW_AT_decl_line - .byte 33 # Abbrev [33] 0x294e:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2950:0x5 DW_TAG_template_type_parameter - .long 7821 # DW_AT_type + .byte 14 # DW_AT_decl_line + .byte 30 # Abbrev [30] 0x29ab:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x29ad:0x5 DW_TAG_template_type_parameter + .long 7947 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark - .byte 55 # Abbrev [55] 0x2957:0x5 DW_TAG_pointer_type - .long 10588 # DW_AT_type - .byte 92 # Abbrev [92] 0x295c:0xc DW_TAG_structure_type - .short 555 # DW_AT_name + .byte 47 # Abbrev [47] 0x29b4:0x5 DW_TAG_pointer_type + .long 10681 # DW_AT_type + .byte 67 # Abbrev [67] 0x29b9:0xc DW_TAG_structure_type + .short 552 # DW_AT_name # DW_AT_declaration - .byte 33 # Abbrev [33] 0x295f:0x8 DW_TAG_GNU_template_parameter_pack - .byte 86 # DW_AT_name - .byte 34 # Abbrev [34] 0x2961:0x5 DW_TAG_template_type_parameter - .long 7821 # DW_AT_type + .byte 30 # Abbrev [30] 0x29bc:0x8 DW_TAG_GNU_template_parameter_pack + .byte 34 # DW_AT_name + .byte 31 # Abbrev [31] 0x29be:0x5 DW_TAG_template_type_parameter + .long 7947 # DW_AT_type .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark .byte 0 # End Of Children Mark @@ -11834,8 +12109,11 @@ i: .uleb128 .Lfunc_begin126-.Lfunc_begin0 # starting offset .uleb128 .Lfunc_end128-.Lfunc_begin0 # ending offset .byte 4 # DW_RLE_offset_pair - .uleb128 .Lfunc_begin135-.Lfunc_begin0 # starting offset - .uleb128 .Lfunc_end136-.Lfunc_begin0 # ending offset + .uleb128 .Lfunc_begin138-.Lfunc_begin0 # starting offset + .uleb128 .Lfunc_end140-.Lfunc_begin0 # ending offset + .byte 4 # DW_RLE_offset_pair + .uleb128 .Lfunc_begin142-.Lfunc_begin0 # starting offset + .uleb128 .Lfunc_end142-.Lfunc_begin0 # ending offset .byte 3 # DW_RLE_startx_length .byte 3 # start index .uleb128 .Lfunc_end2-.Lfunc_begin2 # length @@ -12197,1128 +12475,1139 @@ i: .ascii "\207\001" # start index .uleb128 .Lfunc_end134-.Lfunc_begin134 # length .byte 3 # DW_RLE_startx_length + .ascii "\210\001" # start index + .uleb128 .Lfunc_end135-.Lfunc_begin135 # length + .byte 3 # DW_RLE_startx_length + .ascii "\211\001" # start index + .uleb128 .Lfunc_end136-.Lfunc_begin136 # length + .byte 3 # DW_RLE_startx_length .ascii "\212\001" # start index .uleb128 .Lfunc_end137-.Lfunc_begin137 # length + .byte 3 # DW_RLE_startx_length + .ascii "\216\001" # start index + .uleb128 .Lfunc_end141-.Lfunc_begin141 # length .byte 0 # DW_RLE_end_of_list .Ldebug_list_header_end0: .section .debug_str_offsets,"",@progbits - .long 2228 # Length of String Offsets Set + .long 2232 # Length of String Offsets Set .short 5 .short 0 .Lstr_offsets_base0: .section .debug_str,"MS",@progbits,1 .Linfo_string0: - .asciz "clang version 15.0.0 (git@github.com:llvm/llvm-project.git 4e115b7d881136947c083e12f62010bc6b1d3f00)" # string offset=0 + .asciz "clang version 22.0.0git (git@github.com:Michael137/llvm-project.git f45bb984e6f21e702b4d65f1eeea1429f43c800e)" # string offset=0 .Linfo_string1: - .asciz "cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp" # string offset=101 + .asciz "cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp" # string offset=110 .Linfo_string2: - .asciz "/usr/local/google/home/blaikie/dev/llvm/src" # string offset=188 + .asciz "/Users/michaelbuch/Git/llvm-worktrees/main" # string offset=197 .Linfo_string3: - .asciz "i" # string offset=232 + .asciz "i" # string offset=240 .Linfo_string4: - .asciz "int" # string offset=234 + .asciz "int" # string offset=242 .Linfo_string5: - .asciz "unsigned int" # string offset=238 + .asciz "unsigned int" # string offset=246 .Linfo_string6: - .asciz "LocalEnum1" # string offset=251 + .asciz "LocalEnum1" # string offset=259 .Linfo_string7: - .asciz "LocalEnum" # string offset=262 + .asciz "LocalEnum" # string offset=270 .Linfo_string8: - .asciz "ns" # string offset=272 + .asciz "ns" # string offset=280 .Linfo_string9: - .asciz "Enumerator1" # string offset=275 + .asciz "Enumerator1" # string offset=283 .Linfo_string10: - .asciz "Enumerator2" # string offset=287 + .asciz "Enumerator2" # string offset=295 .Linfo_string11: - .asciz "Enumerator3" # string offset=299 + .asciz "Enumerator3" # string offset=307 .Linfo_string12: - .asciz "Enumeration" # string offset=311 + .asciz "Enumeration" # string offset=319 .Linfo_string13: - .asciz "EnumerationClass" # string offset=323 + .asciz "EnumerationClass" # string offset=331 .Linfo_string14: - .asciz "unsigned char" # string offset=340 + .asciz "unsigned char" # string offset=348 .Linfo_string15: - .asciz "kNeg" # string offset=354 + .asciz "kNeg" # string offset=362 .Linfo_string16: - .asciz "EnumerationSmall" # string offset=359 + .asciz "EnumerationSmall" # string offset=367 .Linfo_string17: - .asciz "AnonEnum1" # string offset=376 + .asciz "AnonEnum1" # string offset=384 .Linfo_string18: - .asciz "AnonEnum2" # string offset=386 + .asciz "AnonEnum2" # string offset=394 .Linfo_string19: - .asciz "AnonEnum3" # string offset=396 + .asciz "AnonEnum3" # string offset=404 .Linfo_string20: - .asciz "T" # string offset=406 + .asciz "T" # string offset=414 .Linfo_string21: - .asciz "bool" # string offset=408 + .asciz "bool" # string offset=416 .Linfo_string22: - .asciz "b" # string offset=413 + .asciz "b" # string offset=421 .Linfo_string23: - .asciz "_STN|t3|" # string offset=415 + .asciz "_STN|t3|" # string offset=423 .Linfo_string24: - .asciz "t10" # string offset=435 + .asciz "t10" # string offset=444 .Linfo_string25: - .asciz "std" # string offset=439 + .asciz "t6" # string offset=448 .Linfo_string26: - .asciz "signed char" # string offset=443 + .asciz "_ZN2t6lsIiEEvi" # string offset=451 .Linfo_string27: - .asciz "__int8_t" # string offset=455 + .asciz "operator<<" # string offset=466 .Linfo_string28: - .asciz "int8_t" # string offset=464 + .asciz "_ZN2t6ltIiEEvi" # string offset=482 .Linfo_string29: - .asciz "short" # string offset=471 + .asciz "operator<" # string offset=497 .Linfo_string30: - .asciz "__int16_t" # string offset=477 + .asciz "_ZN2t6leIiEEvi" # string offset=512 .Linfo_string31: - .asciz "int16_t" # string offset=487 + .asciz "operator<=" # string offset=527 .Linfo_string32: - .asciz "__int32_t" # string offset=495 + .asciz "_ZN2t6cvP2t1IJfEEIiEEv" # string offset=543 .Linfo_string33: - .asciz "int32_t" # string offset=505 + .asciz "operator t1 *" # string offset=566 .Linfo_string34: - .asciz "long" # string offset=513 + .asciz "Ts" # string offset=592 .Linfo_string35: - .asciz "__int64_t" # string offset=518 + .asciz "float" # string offset=595 .Linfo_string36: - .asciz "int64_t" # string offset=528 + .asciz "_STN|t1|" # string offset=601 .Linfo_string37: - .asciz "int_fast8_t" # string offset=536 + .asciz "_ZN2t6miIiEEvi" # string offset=617 .Linfo_string38: - .asciz "int_fast16_t" # string offset=548 + .asciz "operator-" # string offset=632 .Linfo_string39: - .asciz "int_fast32_t" # string offset=561 + .asciz "_ZN2t6mlIiEEvi" # string offset=647 .Linfo_string40: - .asciz "int_fast64_t" # string offset=574 + .asciz "operator*" # string offset=662 .Linfo_string41: - .asciz "__int_least8_t" # string offset=587 + .asciz "_ZN2t6dvIiEEvi" # string offset=677 .Linfo_string42: - .asciz "int_least8_t" # string offset=602 + .asciz "operator/" # string offset=692 .Linfo_string43: - .asciz "__int_least16_t" # string offset=615 + .asciz "_ZN2t6rmIiEEvi" # string offset=707 .Linfo_string44: - .asciz "int_least16_t" # string offset=631 + .asciz "operator%" # string offset=722 .Linfo_string45: - .asciz "__int_least32_t" # string offset=645 + .asciz "_ZN2t6eoIiEEvi" # string offset=737 .Linfo_string46: - .asciz "int_least32_t" # string offset=661 + .asciz "operator^" # string offset=752 .Linfo_string47: - .asciz "__int_least64_t" # string offset=675 + .asciz "_ZN2t6anIiEEvi" # string offset=767 .Linfo_string48: - .asciz "int_least64_t" # string offset=691 + .asciz "operator&" # string offset=782 .Linfo_string49: - .asciz "__intmax_t" # string offset=705 + .asciz "_ZN2t6orIiEEvi" # string offset=797 .Linfo_string50: - .asciz "intmax_t" # string offset=716 + .asciz "operator|" # string offset=812 .Linfo_string51: - .asciz "intptr_t" # string offset=725 + .asciz "_ZN2t6coIiEEvv" # string offset=827 .Linfo_string52: - .asciz "__uint8_t" # string offset=734 + .asciz "operator~" # string offset=842 .Linfo_string53: - .asciz "uint8_t" # string offset=744 + .asciz "_ZN2t6ntIiEEvv" # string offset=857 .Linfo_string54: - .asciz "unsigned short" # string offset=752 + .asciz "operator!" # string offset=872 .Linfo_string55: - .asciz "__uint16_t" # string offset=767 + .asciz "_ZN2t6aSIiEEvi" # string offset=887 .Linfo_string56: - .asciz "uint16_t" # string offset=778 + .asciz "operator=" # string offset=902 .Linfo_string57: - .asciz "__uint32_t" # string offset=787 + .asciz "_ZN2t6gtIiEEvi" # string offset=917 .Linfo_string58: - .asciz "uint32_t" # string offset=798 + .asciz "operator>" # string offset=932 .Linfo_string59: - .asciz "unsigned long" # string offset=807 + .asciz "_ZN2t6cmIiEEvi" # string offset=947 .Linfo_string60: - .asciz "__uint64_t" # string offset=821 + .asciz "operator," # string offset=962 .Linfo_string61: - .asciz "uint64_t" # string offset=832 + .asciz "_ZN2t6clIiEEvv" # string offset=977 .Linfo_string62: - .asciz "uint_fast8_t" # string offset=841 + .asciz "operator()" # string offset=992 .Linfo_string63: - .asciz "uint_fast16_t" # string offset=854 + .asciz "_ZN2t6ixIiEEvi" # string offset=1008 .Linfo_string64: - .asciz "uint_fast32_t" # string offset=868 + .asciz "operator[]" # string offset=1023 .Linfo_string65: - .asciz "uint_fast64_t" # string offset=882 + .asciz "_ZN2t6ssIiEEvi" # string offset=1039 .Linfo_string66: - .asciz "__uint_least8_t" # string offset=896 + .asciz "operator<=>" # string offset=1054 .Linfo_string67: - .asciz "uint_least8_t" # string offset=912 + .asciz "_ZN2t6nwIiEEPvmT_" # string offset=1071 .Linfo_string68: - .asciz "__uint_least16_t" # string offset=926 + .asciz "operator new" # string offset=1089 .Linfo_string69: - .asciz "uint_least16_t" # string offset=943 + .asciz "std" # string offset=1107 .Linfo_string70: - .asciz "__uint_least32_t" # string offset=958 + .asciz "__1" # string offset=1111 .Linfo_string71: - .asciz "uint_least32_t" # string offset=975 + .asciz "unsigned long" # string offset=1115 .Linfo_string72: - .asciz "__uint_least64_t" # string offset=990 + .asciz "size_t" # string offset=1129 .Linfo_string73: - .asciz "uint_least64_t" # string offset=1007 + .asciz "_ZN2t6naIiEEPvmT_" # string offset=1136 .Linfo_string74: - .asciz "__uintmax_t" # string offset=1022 + .asciz "operator new[]" # string offset=1154 .Linfo_string75: - .asciz "uintmax_t" # string offset=1034 + .asciz "_ZN2t6dlIiEEvPvT_" # string offset=1174 .Linfo_string76: - .asciz "uintptr_t" # string offset=1044 + .asciz "operator delete" # string offset=1192 .Linfo_string77: - .asciz "t6" # string offset=1054 + .asciz "_ZN2t6daIiEEvPvT_" # string offset=1213 .Linfo_string78: - .asciz "_ZN2t6lsIiEEvi" # string offset=1057 + .asciz "operator delete[]" # string offset=1231 .Linfo_string79: - .asciz "operator<<" # string offset=1072 + .asciz "_ZN2t6awIiEEiv" # string offset=1254 .Linfo_string80: - .asciz "_ZN2t6ltIiEEvi" # string offset=1088 + .asciz "operator co_await" # string offset=1269 .Linfo_string81: - .asciz "operator<" # string offset=1103 + .asciz "_ZN3t10C4IvEEv" # string offset=1292 .Linfo_string82: - .asciz "_ZN2t6leIiEEvi" # string offset=1118 + .asciz "_STN|t10|" # string offset=1307 .Linfo_string83: - .asciz "operator<=" # string offset=1133 + .asciz "_ZN2t83memEv" # string offset=1323 .Linfo_string84: - .asciz "_ZN2t6cvP2t1IJfEEIiEEv" # string offset=1149 + .asciz "mem" # string offset=1336 .Linfo_string85: - .asciz "operator t1 *" # string offset=1172 + .asciz "t8" # string offset=1340 .Linfo_string86: - .asciz "Ts" # string offset=1198 + .asciz "complex_type_units" # string offset=1343 .Linfo_string87: - .asciz "float" # string offset=1201 + .asciz "signed char" # string offset=1362 .Linfo_string88: - .asciz "_STN|t1|" # string offset=1207 + .asciz "int8_t" # string offset=1374 .Linfo_string89: - .asciz "_ZN2t6miIiEEvi" # string offset=1222 + .asciz "short" # string offset=1381 .Linfo_string90: - .asciz "operator-" # string offset=1237 + .asciz "int16_t" # string offset=1387 .Linfo_string91: - .asciz "_ZN2t6mlIiEEvi" # string offset=1252 + .asciz "int32_t" # string offset=1395 .Linfo_string92: - .asciz "operator*" # string offset=1267 + .asciz "long" # string offset=1403 .Linfo_string93: - .asciz "_ZN2t6dvIiEEvi" # string offset=1282 + .asciz "int64_t" # string offset=1408 .Linfo_string94: - .asciz "operator/" # string offset=1297 + .asciz "uint8_t" # string offset=1416 .Linfo_string95: - .asciz "_ZN2t6rmIiEEvi" # string offset=1312 + .asciz "unsigned short" # string offset=1424 .Linfo_string96: - .asciz "operator%" # string offset=1327 + .asciz "uint16_t" # string offset=1439 .Linfo_string97: - .asciz "_ZN2t6eoIiEEvi" # string offset=1342 + .asciz "uint32_t" # string offset=1448 .Linfo_string98: - .asciz "operator^" # string offset=1357 + .asciz "uint64_t" # string offset=1457 .Linfo_string99: - .asciz "_ZN2t6anIiEEvi" # string offset=1372 + .asciz "int_least8_t" # string offset=1466 .Linfo_string100: - .asciz "operator&" # string offset=1387 + .asciz "int_least16_t" # string offset=1479 .Linfo_string101: - .asciz "_ZN2t6orIiEEvi" # string offset=1402 + .asciz "int_least32_t" # string offset=1493 .Linfo_string102: - .asciz "operator|" # string offset=1417 + .asciz "int_least64_t" # string offset=1507 .Linfo_string103: - .asciz "_ZN2t6coIiEEvv" # string offset=1432 + .asciz "uint_least8_t" # string offset=1521 .Linfo_string104: - .asciz "operator~" # string offset=1447 + .asciz "uint_least16_t" # string offset=1535 .Linfo_string105: - .asciz "_ZN2t6ntIiEEvv" # string offset=1462 + .asciz "uint_least32_t" # string offset=1550 .Linfo_string106: - .asciz "operator!" # string offset=1477 + .asciz "uint_least64_t" # string offset=1565 .Linfo_string107: - .asciz "_ZN2t6aSIiEEvi" # string offset=1492 + .asciz "int_fast8_t" # string offset=1580 .Linfo_string108: - .asciz "operator=" # string offset=1507 + .asciz "int_fast16_t" # string offset=1592 .Linfo_string109: - .asciz "_ZN2t6gtIiEEvi" # string offset=1522 + .asciz "int_fast32_t" # string offset=1605 .Linfo_string110: - .asciz "operator>" # string offset=1537 + .asciz "int_fast64_t" # string offset=1618 .Linfo_string111: - .asciz "_ZN2t6cmIiEEvi" # string offset=1552 + .asciz "uint_fast8_t" # string offset=1631 .Linfo_string112: - .asciz "operator," # string offset=1567 + .asciz "uint_fast16_t" # string offset=1644 .Linfo_string113: - .asciz "_ZN2t6clIiEEvv" # string offset=1582 + .asciz "uint_fast32_t" # string offset=1658 .Linfo_string114: - .asciz "operator()" # string offset=1597 + .asciz "uint_fast64_t" # string offset=1672 .Linfo_string115: - .asciz "_ZN2t6ixIiEEvi" # string offset=1613 + .asciz "intptr_t" # string offset=1686 .Linfo_string116: - .asciz "operator[]" # string offset=1628 + .asciz "uintptr_t" # string offset=1695 .Linfo_string117: - .asciz "_ZN2t6ssIiEEvi" # string offset=1644 + .asciz "intmax_t" # string offset=1705 .Linfo_string118: - .asciz "operator<=>" # string offset=1659 + .asciz "uintmax_t" # string offset=1714 .Linfo_string119: - .asciz "_ZN2t6nwIiEEPvmT_" # string offset=1676 + .asciz "max_align_t" # string offset=1724 .Linfo_string120: - .asciz "operator new" # string offset=1694 + .asciz "_Zli5_suffy" # string offset=1736 .Linfo_string121: - .asciz "size_t" # string offset=1712 + .asciz "operator\"\"_suff" # string offset=1748 .Linfo_string122: - .asciz "_ZN2t6naIiEEPvmT_" # string offset=1719 + .asciz "main" # string offset=1764 .Linfo_string123: - .asciz "operator new[]" # string offset=1737 + .asciz "_Z2f1IJiEEvv" # string offset=1769 .Linfo_string124: - .asciz "_ZN2t6dlIiEEvPvT_" # string offset=1757 + .asciz "_STN|f1|" # string offset=1782 .Linfo_string125: - .asciz "operator delete" # string offset=1775 + .asciz "_Z2f1IJfEEvv" # string offset=1796 .Linfo_string126: - .asciz "_ZN2t6daIiEEvPvT_" # string offset=1796 + .asciz "_STN|f1|" # string offset=1809 .Linfo_string127: - .asciz "operator delete[]" # string offset=1814 + .asciz "_Z2f1IJbEEvv" # string offset=1825 .Linfo_string128: - .asciz "_ZN2t6awIiEEiv" # string offset=1837 + .asciz "_STN|f1|" # string offset=1838 .Linfo_string129: - .asciz "operator co_await" # string offset=1852 + .asciz "double" # string offset=1853 .Linfo_string130: - .asciz "_STN|t10|" # string offset=1875 + .asciz "_Z2f1IJdEEvv" # string offset=1860 .Linfo_string131: - .asciz "_ZN2t83memEv" # string offset=1890 + .asciz "_STN|f1|" # string offset=1873 .Linfo_string132: - .asciz "mem" # string offset=1903 + .asciz "_Z2f1IJlEEvv" # string offset=1890 .Linfo_string133: - .asciz "t8" # string offset=1907 + .asciz "_STN|f1|" # string offset=1903 .Linfo_string134: - .asciz "_Zli5_suffy" # string offset=1910 + .asciz "_Z2f1IJsEEvv" # string offset=1918 .Linfo_string135: - .asciz "operator\"\"_suff" # string offset=1922 + .asciz "_STN|f1|" # string offset=1931 .Linfo_string136: - .asciz "main" # string offset=1938 + .asciz "_Z2f1IJjEEvv" # string offset=1947 .Linfo_string137: - .asciz "_Z2f1IJiEEvv" # string offset=1943 + .asciz "_STN|f1|" # string offset=1960 .Linfo_string138: - .asciz "_STN|f1|" # string offset=1956 + .asciz "unsigned long long" # string offset=1983 .Linfo_string139: - .asciz "_Z2f1IJfEEvv" # string offset=1969 + .asciz "_Z2f1IJyEEvv" # string offset=2002 .Linfo_string140: - .asciz "_STN|f1|" # string offset=1982 + .asciz "_STN|f1|" # string offset=2015 .Linfo_string141: - .asciz "_Z2f1IJbEEvv" # string offset=1997 + .asciz "long long" # string offset=2044 .Linfo_string142: - .asciz "_STN|f1|" # string offset=2010 + .asciz "_Z2f1IJxEEvv" # string offset=2054 .Linfo_string143: - .asciz "double" # string offset=2024 + .asciz "_STN|f1|" # string offset=2067 .Linfo_string144: - .asciz "_Z2f1IJdEEvv" # string offset=2031 + .asciz "udt" # string offset=2087 .Linfo_string145: - .asciz "_STN|f1|" # string offset=2044 + .asciz "_Z2f1IJ3udtEEvv" # string offset=2091 .Linfo_string146: - .asciz "_Z2f1IJlEEvv" # string offset=2060 + .asciz "_STN|f1|" # string offset=2107 .Linfo_string147: - .asciz "_STN|f1|" # string offset=2073 + .asciz "_Z2f1IJN2ns3udtEEEvv" # string offset=2121 .Linfo_string148: - .asciz "_Z2f1IJsEEvv" # string offset=2087 + .asciz "_STN|f1|" # string offset=2142 .Linfo_string149: - .asciz "_STN|f1|" # string offset=2100 + .asciz "_Z2f1IJPN2ns3udtEEEvv" # string offset=2160 .Linfo_string150: - .asciz "_Z2f1IJjEEvv" # string offset=2115 + .asciz "_STN|f1|" # string offset=2182 .Linfo_string151: - .asciz "_STN|f1|" # string offset=2128 + .asciz "inner" # string offset=2202 .Linfo_string152: - .asciz "unsigned long long" # string offset=2150 + .asciz "_Z2f1IJN2ns5inner3udtEEEvv" # string offset=2208 .Linfo_string153: - .asciz "_Z2f1IJyEEvv" # string offset=2169 + .asciz "_STN|f1|" # string offset=2235 .Linfo_string154: - .asciz "_STN|f1|" # string offset=2182 + .asciz "_STN|t1|" # string offset=2260 .Linfo_string155: - .asciz "long long" # string offset=2210 + .asciz "_Z2f1IJ2t1IJiEEEEvv" # string offset=2274 .Linfo_string156: - .asciz "_Z2f1IJxEEvv" # string offset=2220 + .asciz "_STN|f1| >" # string offset=2294 .Linfo_string157: - .asciz "_STN|f1|" # string offset=2233 + .asciz "_Z2f1IJifEEvv" # string offset=2313 .Linfo_string158: - .asciz "udt" # string offset=2252 + .asciz "_STN|f1|" # string offset=2327 .Linfo_string159: - .asciz "_Z2f1IJ3udtEEvv" # string offset=2256 + .asciz "_Z2f1IJPiEEvv" # string offset=2348 .Linfo_string160: - .asciz "_STN|f1|" # string offset=2272 + .asciz "_STN|f1|" # string offset=2362 .Linfo_string161: - .asciz "_Z2f1IJN2ns3udtEEEvv" # string offset=2285 + .asciz "_Z2f1IJRiEEvv" # string offset=2378 .Linfo_string162: - .asciz "_STN|f1|" # string offset=2306 + .asciz "_STN|f1|" # string offset=2392 .Linfo_string163: - .asciz "_Z2f1IJPN2ns3udtEEEvv" # string offset=2323 + .asciz "_Z2f1IJOiEEvv" # string offset=2408 .Linfo_string164: - .asciz "_STN|f1|" # string offset=2345 + .asciz "_STN|f1|" # string offset=2422 .Linfo_string165: - .asciz "inner" # string offset=2364 + .asciz "_Z2f1IJKiEEvv" # string offset=2439 .Linfo_string166: - .asciz "_Z2f1IJN2ns5inner3udtEEEvv" # string offset=2370 + .asciz "_STN|f1|" # string offset=2453 .Linfo_string167: - .asciz "_STN|f1|" # string offset=2397 + .asciz "__ARRAY_SIZE_TYPE__" # string offset=2473 .Linfo_string168: - .asciz "_STN|t1|" # string offset=2421 + .asciz "_Z2f1IJA3_iEEvv" # string offset=2493 .Linfo_string169: - .asciz "_Z2f1IJ2t1IJiEEEEvv" # string offset=2434 + .asciz "_STN|f1|" # string offset=2509 .Linfo_string170: - .asciz "_STN|f1| >" # string offset=2454 + .asciz "_Z2f1IJvEEvv" # string offset=2526 .Linfo_string171: - .asciz "_Z2f1IJifEEvv" # string offset=2472 + .asciz "_STN|f1|" # string offset=2539 .Linfo_string172: - .asciz "_STN|f1|" # string offset=2486 + .asciz "outer_class" # string offset=2554 .Linfo_string173: - .asciz "_Z2f1IJPiEEvv" # string offset=2506 + .asciz "inner_class" # string offset=2566 .Linfo_string174: - .asciz "_STN|f1|" # string offset=2520 + .asciz "_Z2f1IJN11outer_class11inner_classEEEvv" # string offset=2578 .Linfo_string175: - .asciz "_Z2f1IJRiEEvv" # string offset=2535 + .asciz "_STN|f1|" # string offset=2618 .Linfo_string176: - .asciz "_STN|f1|" # string offset=2549 + .asciz "_Z2f1IJmEEvv" # string offset=2653 .Linfo_string177: - .asciz "_Z2f1IJOiEEvv" # string offset=2564 + .asciz "_STN|f1|" # string offset=2666 .Linfo_string178: - .asciz "_STN|f1|" # string offset=2578 + .asciz "_Z2f2ILb1ELi3EEvv" # string offset=2690 .Linfo_string179: - .asciz "_Z2f1IJKiEEvv" # string offset=2594 + .asciz "_STN|f2|" # string offset=2708 .Linfo_string180: - .asciz "_STN|f1|" # string offset=2608 + .asciz "A" # string offset=2726 .Linfo_string181: - .asciz "__ARRAY_SIZE_TYPE__" # string offset=2627 + .asciz "_Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv" # string offset=2728 .Linfo_string182: - .asciz "_Z2f1IJA3_iEEvv" # string offset=2647 + .asciz "_STN|f3|" # string offset=2776 .Linfo_string183: - .asciz "_STN|f1|" # string offset=2663 + .asciz "_Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv" # string offset=2842 .Linfo_string184: - .asciz "_Z2f1IJvEEvv" # string offset=2679 + .asciz "_STN|f3|" # string offset=2895 .Linfo_string185: - .asciz "_STN|f1|" # string offset=2692 + .asciz "_Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv" # string offset=2976 .Linfo_string186: - .asciz "outer_class" # string offset=2706 + .asciz "_STN|f3|" # string offset=3025 .Linfo_string187: - .asciz "inner_class" # string offset=2718 + .asciz "_Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv" # string offset=3083 .Linfo_string188: - .asciz "_Z2f1IJN11outer_class11inner_classEEEvv" # string offset=2730 + .asciz "f3" # string offset=3122 .Linfo_string189: - .asciz "_STN|f1|" # string offset=2770 + .asciz "_Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv" # string offset=3476 .Linfo_string190: - .asciz "_Z2f1IJmEEvv" # string offset=2804 + .asciz "f3<(anonymous namespace)::LocalEnum, ((anonymous namespace)::LocalEnum)0>" # string offset=3526 .Linfo_string191: - .asciz "_STN|f1|" # string offset=2817 + .asciz "_Z2f3IPiTpTnT_JXadL_Z1iEEEEvv" # string offset=3600 .Linfo_string192: - .asciz "_Z2f2ILb1ELi3EEvv" # string offset=2840 + .asciz "f3" # string offset=3630 .Linfo_string193: - .asciz "_STN|f2|" # string offset=2858 + .asciz "_Z2f3IPiTpTnT_JLS0_0EEEvv" # string offset=3644 .Linfo_string194: - .asciz "A" # string offset=2875 + .asciz "f3" # string offset=3670 .Linfo_string195: - .asciz "_Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv" # string offset=2877 + .asciz "_Z2f3ImTpTnT_JLm1EEEvv" # string offset=3689 .Linfo_string196: - .asciz "_STN|f3|" # string offset=2919 + .asciz "_STN|f3|" # string offset=3712 .Linfo_string197: - .asciz "_Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv" # string offset=2981 + .asciz "_Z2f3IyTpTnT_JLy1EEEvv" # string offset=3741 .Linfo_string198: - .asciz "_STN|f3|" # string offset=3028 + .asciz "_STN|f3|" # string offset=3764 .Linfo_string199: - .asciz "_Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv" # string offset=3118 + .asciz "_Z2f3IlTpTnT_JLl1EEEvv" # string offset=3799 .Linfo_string200: - .asciz "_STN|f3|" # string offset=3161 + .asciz "_STN|f3|" # string offset=3822 .Linfo_string201: - .asciz "_Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv" # string offset=3201 + .asciz "_Z2f3IjTpTnT_JLj1EEEvv" # string offset=3841 .Linfo_string202: - .asciz "f3" # string offset=3234 + .asciz "_STN|f3|" # string offset=3864 .Linfo_string203: - .asciz "_Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv" # string offset=3485 + .asciz "_Z2f3IsTpTnT_JLs1EEEvv" # string offset=3891 .Linfo_string204: - .asciz "f3<(anonymous namespace)::LocalEnum, (anonymous namespace)::LocalEnum1>" # string offset=3529 + .asciz "_STN|f3|" # string offset=3914 .Linfo_string205: - .asciz "_Z2f3IPiJXadL_Z1iEEEEvv" # string offset=3601 + .asciz "_Z2f3IhTpTnT_JLh0EEEvv" # string offset=3940 .Linfo_string206: - .asciz "f3" # string offset=3625 + .asciz "_STN|f3|" # string offset=3963 .Linfo_string207: - .asciz "_Z2f3IPiJLS0_0EEEvv" # string offset=3639 + .asciz "_Z2f3IaTpTnT_JLa0EEEvv" # string offset=4010 .Linfo_string208: - .asciz "f3" # string offset=3659 + .asciz "_STN|f3|" # string offset=4033 .Linfo_string209: - .asciz "_Z2f3ImJLm1EEEvv" # string offset=3678 + .asciz "_Z2f3ItTpTnT_JLt1ELt2EEEvv" # string offset=4076 .Linfo_string210: - .asciz "_STN|f3|" # string offset=3695 + .asciz "_STN|f3|" # string offset=4103 .Linfo_string211: - .asciz "_Z2f3IyJLy1EEEvv" # string offset=3723 + .asciz "char" # string offset=4166 .Linfo_string212: - .asciz "_STN|f3|" # string offset=3740 + .asciz "_Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv" # string offset=4171 .Linfo_string213: - .asciz "_Z2f3IlJLl1EEEvv" # string offset=3774 + .asciz "_STN|f3|" # string offset=4244 .Linfo_string214: - .asciz "_STN|f3|" # string offset=3791 + .asciz "__int128" # string offset=4337 .Linfo_string215: - .asciz "_Z2f3IjJLj1EEEvv" # string offset=3809 + .asciz "_Z2f3InTpTnT_JLn18446744073709551614EEEvv" # string offset=4346 .Linfo_string216: - .asciz "_STN|f3|" # string offset=3826 + .asciz "f3<__int128, (__int128)18446744073709551614>" # string offset=4388 .Linfo_string217: - .asciz "_Z2f3IsJLs1EEEvv" # string offset=3852 + .asciz "_Z2f4IjLj3EEvv" # string offset=4433 .Linfo_string218: - .asciz "_STN|f3|" # string offset=3869 + .asciz "_STN|f4|" # string offset=4448 .Linfo_string219: - .asciz "_Z2f3IhJLh0EEEvv" # string offset=3894 + .asciz "_Z2f1IJ2t3IiLb0EEEEvv" # string offset=4475 .Linfo_string220: - .asciz "_STN|f3|" # string offset=3911 + .asciz "_STN|f1| >" # string offset=4497 .Linfo_string221: - .asciz "_Z2f3IaJLa0EEEvv" # string offset=3957 + .asciz "_STN|t3|, false>" # string offset=4523 .Linfo_string222: - .asciz "_STN|f3|" # string offset=3974 + .asciz "_Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv" # string offset=4555 .Linfo_string223: - .asciz "_Z2f3ItJLt1ELt2EEEvv" # string offset=4016 + .asciz "_STN|f1|, false> >" # string offset=4586 .Linfo_string224: - .asciz "_STN|f3|" # string offset=4037 + .asciz "_Z2f1IJZ4mainE3$_0EEvv" # string offset=4623 .Linfo_string225: - .asciz "char" # string offset=4099 + .asciz "f1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12)>" # string offset=4646 .Linfo_string226: - .asciz "_Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv" # string offset=4104 + .asciz "t3<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12), false>" # string offset=4756 .Linfo_string227: - .asciz "_STN|f3|" # string offset=4171 + .asciz "t3, false>" # string offset=4873 .Linfo_string228: - .asciz "__int128" # string offset=4263 + .asciz "_Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv" # string offset=5001 .Linfo_string229: - .asciz "_Z2f3InJLn18446744073709551614EEEvv" # string offset=4272 + .asciz "f1, false> >" # string offset=5042 .Linfo_string230: - .asciz "f3<__int128, (__int128)18446744073709551614>" # string offset=4308 + .asciz "_Z2f1IJFifEEEvv" # string offset=5175 .Linfo_string231: - .asciz "_Z2f4IjLj3EEvv" # string offset=4353 + .asciz "_STN|f1|" # string offset=5191 .Linfo_string232: - .asciz "_STN|f4|" # string offset=4368 + .asciz "_Z2f1IJFvzEEEvv" # string offset=5213 .Linfo_string233: - .asciz "_Z2f1IJ2t3IiLb0EEEEvv" # string offset=4394 + .asciz "_STN|f1|" # string offset=5229 .Linfo_string234: - .asciz "_STN|f1| >" # string offset=4416 + .asciz "_Z2f1IJFvizEEEvv" # string offset=5250 .Linfo_string235: - .asciz "_STN|t3|, false>" # string offset=4441 + .asciz "_STN|f1|" # string offset=5267 .Linfo_string236: - .asciz "_Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv" # string offset=4472 + .asciz "_Z2f1IJRKiEEvv" # string offset=5293 .Linfo_string237: - .asciz "_STN|f1|, false> >" # string offset=4503 + .asciz "_STN|f1|" # string offset=5308 .Linfo_string238: - .asciz "_Z2f1IJZ4mainE3$_1EEvv" # string offset=4539 + .asciz "_Z2f1IJRPKiEEvv" # string offset=5330 .Linfo_string239: - .asciz "f1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12)>" # string offset=4562 + .asciz "_STN|f1|" # string offset=5346 .Linfo_string240: - .asciz "t3<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12), false>" # string offset=4672 + .asciz "t5" # string offset=5369 .Linfo_string241: - .asciz "t3, false>" # string offset=4789 + .asciz "_Z2f1IJN12_GLOBAL__N_12t5EEEvv" # string offset=5372 .Linfo_string242: - .asciz "_Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv" # string offset=4917 + .asciz "_STN|f1|<(anonymous namespace)::t5>" # string offset=5403 .Linfo_string243: - .asciz "f1, false> >" # string offset=4958 + .asciz "decltype(nullptr)" # string offset=5439 .Linfo_string244: - .asciz "_Z2f1IJFifEEEvv" # string offset=5091 + .asciz "_Z2f1IJDnEEvv" # string offset=5457 .Linfo_string245: - .asciz "_STN|f1|" # string offset=5107 + .asciz "_STN|f1|" # string offset=5471 .Linfo_string246: - .asciz "_Z2f1IJFvzEEEvv" # string offset=5128 + .asciz "_Z2f1IJPlS0_EEvv" # string offset=5496 .Linfo_string247: - .asciz "_STN|f1|" # string offset=5144 + .asciz "_STN|f1|" # string offset=5513 .Linfo_string248: - .asciz "_Z2f1IJFvizEEEvv" # string offset=5164 + .asciz "_Z2f1IJPlP3udtEEvv" # string offset=5538 .Linfo_string249: - .asciz "_STN|f1|" # string offset=5181 + .asciz "_STN|f1|" # string offset=5557 .Linfo_string250: - .asciz "_Z2f1IJRKiEEvv" # string offset=5206 + .asciz "_Z2f1IJKPvEEvv" # string offset=5581 .Linfo_string251: - .asciz "_STN|f1|" # string offset=5221 + .asciz "_STN|f1|" # string offset=5596 .Linfo_string252: - .asciz "_Z2f1IJRPKiEEvv" # string offset=5242 + .asciz "_Z2f1IJPKPKvEEvv" # string offset=5618 .Linfo_string253: - .asciz "_STN|f1|" # string offset=5258 + .asciz "_STN|f1|" # string offset=5635 .Linfo_string254: - .asciz "t5" # string offset=5280 + .asciz "_Z2f1IJFvvEEEvv" # string offset=5665 .Linfo_string255: - .asciz "_Z2f1IJN12_GLOBAL__N_12t5EEEvv" # string offset=5283 + .asciz "_STN|f1|" # string offset=5681 .Linfo_string256: - .asciz "_STN|f1|<(anonymous namespace)::t5>" # string offset=5314 + .asciz "_Z2f1IJPFvvEEEvv" # string offset=5699 .Linfo_string257: - .asciz "decltype(nullptr)" # string offset=5349 + .asciz "_STN|f1|" # string offset=5716 .Linfo_string258: - .asciz "_Z2f1IJDnEEvv" # string offset=5367 + .asciz "_Z2f1IJPZ4mainE3$_0EEvv" # string offset=5737 .Linfo_string259: - .asciz "_STN|f1|" # string offset=5381 + .asciz "f1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12) *>" # string offset=5761 .Linfo_string260: - .asciz "_Z2f1IJPlS0_EEvv" # string offset=5405 + .asciz "_Z2f1IJZ4mainE3$_1EEvv" # string offset=5873 .Linfo_string261: - .asciz "_STN|f1|" # string offset=5422 + .asciz "f1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3)>" # string offset=5896 .Linfo_string262: - .asciz "_Z2f1IJPlP3udtEEvv" # string offset=5446 + .asciz "_Z2f1IJPZ4mainE3$_1EEvv" # string offset=6013 .Linfo_string263: - .asciz "_STN|f1|" # string offset=5465 + .asciz "f1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3) *>" # string offset=6037 .Linfo_string264: - .asciz "_Z2f1IJKPvEEvv" # string offset=5488 + .asciz "T1" # string offset=6156 .Linfo_string265: - .asciz "_STN|f1|" # string offset=5503 + .asciz "T2" # string offset=6159 .Linfo_string266: - .asciz "_Z2f1IJPKPKvEEvv" # string offset=5524 + .asciz "_Z2f5IJ2t1IJiEEEiEvv" # string offset=6162 .Linfo_string267: - .asciz "_STN|f1|" # string offset=5541 + .asciz "_STN|f5|, int>" # string offset=6183 .Linfo_string268: - .asciz "_Z2f1IJFvvEEEvv" # string offset=5570 + .asciz "_Z2f5IJEiEvv" # string offset=6206 .Linfo_string269: - .asciz "_STN|f1|" # string offset=5586 + .asciz "_STN|f5|" # string offset=6219 .Linfo_string270: - .asciz "_Z2f1IJPFvvEEEvv" # string offset=5603 + .asciz "_Z2f6I2t1IJiEEJEEvv" # string offset=6233 .Linfo_string271: - .asciz "_STN|f1|" # string offset=5620 + .asciz "_STN|f6| >" # string offset=6253 .Linfo_string272: - .asciz "_Z2f1IJPZ4mainE3$_1EEvv" # string offset=5640 + .asciz "_Z2f1IJEEvv" # string offset=6272 .Linfo_string273: - .asciz "f1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12) *>" # string offset=5664 + .asciz "_STN|f1|<>" # string offset=6284 .Linfo_string274: - .asciz "_Z2f1IJZ4mainE3$_2EEvv" # string offset=5776 + .asciz "_Z2f1IJPKvS1_EEvv" # string offset=6295 .Linfo_string275: - .asciz "f1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3)>" # string offset=5799 + .asciz "_STN|f1|" # string offset=6313 .Linfo_string276: - .asciz "_Z2f1IJPZ4mainE3$_2EEvv" # string offset=5916 + .asciz "_STN|t1|" # string offset=6350 .Linfo_string277: - .asciz "f1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3) *>" # string offset=5940 + .asciz "_Z2f1IJP2t1IJPiEEEEvv" # string offset=6366 .Linfo_string278: - .asciz "T1" # string offset=6059 + .asciz "_STN|f1| *>" # string offset=6388 .Linfo_string279: - .asciz "T2" # string offset=6062 + .asciz "_Z2f1IJA_PiEEvv" # string offset=6410 .Linfo_string280: - .asciz "_Z2f5IJ2t1IJiEEEiEvv" # string offset=6065 + .asciz "_STN|f1|" # string offset=6426 .Linfo_string281: - .asciz "_STN|f5|, int>" # string offset=6086 + .asciz "t7" # string offset=6444 .Linfo_string282: - .asciz "_Z2f5IJEiEvv" # string offset=6108 + .asciz "_Z2f1IJZ4mainE2t7EEvv" # string offset=6447 .Linfo_string283: - .asciz "_STN|f5|" # string offset=6121 + .asciz "_STN|f1|" # string offset=6469 .Linfo_string284: - .asciz "_Z2f6I2t1IJiEEJEEvv" # string offset=6134 + .asciz "_Z2f1IJRA3_iEEvv" # string offset=6482 .Linfo_string285: - .asciz "_STN|f6| >" # string offset=6154 + .asciz "_STN|f1|" # string offset=6499 .Linfo_string286: - .asciz "_Z2f1IJEEvv" # string offset=6172 + .asciz "_Z2f1IJPA3_iEEvv" # string offset=6520 .Linfo_string287: - .asciz "_STN|f1|<>" # string offset=6184 + .asciz "_STN|f1|" # string offset=6537 .Linfo_string288: - .asciz "_Z2f1IJPKvS1_EEvv" # string offset=6194 + .asciz "t1" # string offset=6558 .Linfo_string289: - .asciz "_STN|f1|" # string offset=6212 + .asciz "_Z2f7I2t1Evv" # string offset=6561 .Linfo_string290: - .asciz "_STN|t1|" # string offset=6248 + .asciz "_STN|f7|" # string offset=6574 .Linfo_string291: - .asciz "_Z2f1IJP2t1IJPiEEEEvv" # string offset=6263 + .asciz "_Z2f8I2t1iEvv" # string offset=6587 .Linfo_string292: - .asciz "_STN|f1| *>" # string offset=6285 + .asciz "_STN|f8|" # string offset=6601 .Linfo_string293: - .asciz "_Z2f1IJA_PiEEvv" # string offset=6306 + .asciz "ns::inner::ttp" # string offset=6619 .Linfo_string294: - .asciz "_STN|f1|" # string offset=6322 + .asciz "_ZN2ns8ttp_userINS_5inner3ttpEEEvv" # string offset=6634 .Linfo_string295: - .asciz "t7" # string offset=6339 + .asciz "_STN|ttp_user|" # string offset=6669 .Linfo_string296: - .asciz "_Z2f1IJZ4mainE2t7EEvv" # string offset=6342 + .asciz "_Z2f1IJPiPDnEEvv" # string offset=6700 .Linfo_string297: - .asciz "_STN|f1|" # string offset=6364 + .asciz "_STN|f1|" # string offset=6717 .Linfo_string298: - .asciz "_Z2f1IJRA3_iEEvv" # string offset=6376 + .asciz "_STN|t7|" # string offset=6751 .Linfo_string299: - .asciz "_STN|f1|" # string offset=6393 + .asciz "_Z2f1IJ2t7IiEEEvv" # string offset=6765 .Linfo_string300: - .asciz "_Z2f1IJPA3_iEEvv" # string offset=6413 + .asciz "_STN|f1| >" # string offset=6783 .Linfo_string301: - .asciz "_STN|f1|" # string offset=6430 + .asciz "ns::inl::t9" # string offset=6802 .Linfo_string302: - .asciz "t1" # string offset=6450 + .asciz "_Z2f7ITtTpTyEN2ns3inl2t9EEvv" # string offset=6814 .Linfo_string303: - .asciz "_Z2f7I2t1Evv" # string offset=6453 + .asciz "_STN|f7|" # string offset=6843 .Linfo_string304: - .asciz "_STN|f7|" # string offset=6466 + .asciz "_Z2f1IJU7_AtomiciEEvv" # string offset=6865 .Linfo_string305: - .asciz "_Z2f8I2t1iEvv" # string offset=6478 + .asciz "f1<_Atomic(int)>" # string offset=6887 .Linfo_string306: - .asciz "_STN|f8|" # string offset=6492 + .asciz "_Z2f1IJilVcEEvv" # string offset=6904 .Linfo_string307: - .asciz "ns::inner::ttp" # string offset=6509 + .asciz "_STN|f1|" # string offset=6920 .Linfo_string308: - .asciz "_ZN2ns8ttp_userINS_5inner3ttpEEEvv" # string offset=6524 + .asciz "_Z2f1IJDv2_iEEvv" # string offset=6955 .Linfo_string309: - .asciz "_STN|ttp_user|" # string offset=6559 + .asciz "f1<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=6972 .Linfo_string310: - .asciz "_Z2f1IJPiPDnEEvv" # string offset=6589 + .asciz "_Z2f1IJVKPiEEvv" # string offset=7030 .Linfo_string311: - .asciz "_STN|f1|" # string offset=6606 + .asciz "_STN|f1|" # string offset=7046 .Linfo_string312: - .asciz "_STN|t7|" # string offset=6639 + .asciz "_Z2f1IJVKvEEvv" # string offset=7076 .Linfo_string313: - .asciz "_Z2f1IJ2t7IiEEEvv" # string offset=6652 + .asciz "_STN|f1|" # string offset=7091 .Linfo_string314: - .asciz "_STN|f1| >" # string offset=6670 + .asciz "t1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12)>" # string offset=7121 .Linfo_string315: - .asciz "ns::inl::t9" # string offset=6688 + .asciz "_Z2f1IJ2t1IJZ4mainE3$_0EEEEvv" # string offset=7231 .Linfo_string316: - .asciz "_Z2f7IN2ns3inl2t9EEvv" # string offset=6700 + .asciz "f1 >" # string offset=7261 .Linfo_string317: - .asciz "_STN|f7|" # string offset=6722 + .asciz "_ZN3t10C2IvEEv" # string offset=7376 .Linfo_string318: - .asciz "_Z2f1IJU7_AtomiciEEvv" # string offset=6743 + .asciz "_Z2f1IJM3udtKFvvEEEvv" # string offset=7391 .Linfo_string319: - .asciz "f1<_Atomic(int)>" # string offset=6765 + .asciz "_STN|f1|" # string offset=7413 .Linfo_string320: - .asciz "_Z2f1IJilVcEEvv" # string offset=6782 + .asciz "_Z2f1IJM3udtVFvvREEEvv" # string offset=7445 .Linfo_string321: - .asciz "_STN|f1|" # string offset=6798 + .asciz "_STN|f1|" # string offset=7468 .Linfo_string322: - .asciz "_Z2f1IJDv2_iEEvv" # string offset=6832 + .asciz "_Z2f1IJM3udtVKFvvOEEEvv" # string offset=7505 .Linfo_string323: - .asciz "f1<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=6849 + .asciz "_STN|f1|" # string offset=7529 .Linfo_string324: - .asciz "_Z2f1IJVKPiEEvv" # string offset=6907 + .asciz "_Z2f9IiEPFvvEv" # string offset=7573 .Linfo_string325: - .asciz "_STN|f1|" # string offset=6923 + .asciz "_STN|f9|" # string offset=7588 .Linfo_string326: - .asciz "_Z2f1IJVKvEEvv" # string offset=6952 + .asciz "_Z2f1IJKPFvvEEEvv" # string offset=7602 .Linfo_string327: - .asciz "_STN|f1|" # string offset=6967 + .asciz "_STN|f1|" # string offset=7620 .Linfo_string328: - .asciz "t1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12)>" # string offset=6996 + .asciz "_Z2f1IJRA1_KcEEvv" # string offset=7646 .Linfo_string329: - .asciz "_Z2f1IJ2t1IJZ4mainE3$_1EEEEvv" # string offset=7106 + .asciz "_STN|f1|" # string offset=7664 .Linfo_string330: - .asciz "f1 >" # string offset=7136 + .asciz "_Z2f1IJKFvvREEEvv" # string offset=7692 .Linfo_string331: - .asciz "_ZN3t10C2IvEEv" # string offset=7251 + .asciz "_STN|f1|" # string offset=7710 .Linfo_string332: - .asciz "_Z2f1IJM3udtKFvvEEEvv" # string offset=7266 + .asciz "_Z2f1IJVFvvOEEEvv" # string offset=7736 .Linfo_string333: - .asciz "_STN|f1|" # string offset=7288 + .asciz "_STN|f1|" # string offset=7754 .Linfo_string334: - .asciz "_Z2f1IJM3udtVFvvREEEvv" # string offset=7319 + .asciz "_Z2f1IJVKFvvEEEvv" # string offset=7784 .Linfo_string335: - .asciz "_STN|f1|" # string offset=7342 + .asciz "_STN|f1|" # string offset=7802 .Linfo_string336: - .asciz "_Z2f1IJM3udtVKFvvOEEEvv" # string offset=7378 + .asciz "_Z2f1IJA1_KPiEEvv" # string offset=7835 .Linfo_string337: - .asciz "_STN|f1|" # string offset=7402 + .asciz "_STN|f1|" # string offset=7853 .Linfo_string338: - .asciz "_Z2f9IiEPFvvEv" # string offset=7445 + .asciz "_Z2f1IJRA1_KPiEEvv" # string offset=7877 .Linfo_string339: - .asciz "_STN|f9|" # string offset=7460 + .asciz "_STN|f1|" # string offset=7896 .Linfo_string340: - .asciz "_Z2f1IJKPFvvEEEvv" # string offset=7473 + .asciz "_Z2f1IJRKM3udtFvvEEEvv" # string offset=7924 .Linfo_string341: - .asciz "_STN|f1|" # string offset=7491 + .asciz "_STN|f1|" # string offset=7947 .Linfo_string342: - .asciz "_Z2f1IJRA1_KcEEvv" # string offset=7516 + .asciz "_Z2f1IJFPFvfEiEEEvv" # string offset=7980 .Linfo_string343: - .asciz "_STN|f1|" # string offset=7534 + .asciz "_STN|f1|" # string offset=8000 .Linfo_string344: - .asciz "_Z2f1IJKFvvREEEvv" # string offset=7561 + .asciz "_Z2f1IJA1_2t1IJiEEEEvv" # string offset=8031 .Linfo_string345: - .asciz "_STN|f1|" # string offset=7579 + .asciz "_STN|f1|[1]>" # string offset=8054 .Linfo_string346: - .asciz "_Z2f1IJVFvvOEEEvv" # string offset=7604 + .asciz "_Z2f1IJPDoFvvEEEvv" # string offset=8075 .Linfo_string347: - .asciz "_STN|f1|" # string offset=7622 + .asciz "f1" # string offset=8094 .Linfo_string348: - .asciz "_Z2f1IJVKFvvEEEvv" # string offset=7651 + .asciz "_Z2f1IJFvZ4mainE3$_1EEEvv" # string offset=8118 .Linfo_string349: - .asciz "_STN|f1|" # string offset=7669 + .asciz "f1" # string offset=8144 .Linfo_string350: - .asciz "_Z2f1IJA1_KPiEEvv" # string offset=7701 + .asciz "_Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv" # string offset=8268 .Linfo_string351: - .asciz "_STN|f1|" # string offset=7719 + .asciz "f1" # string offset=8304 .Linfo_string352: - .asciz "_Z2f1IJRA1_KPiEEvv" # string offset=7742 + .asciz "_Z2f1IJFvZ4mainE2t8EEEvv" # string offset=8432 .Linfo_string353: - .asciz "_STN|f1|" # string offset=7761 + .asciz "_STN|f1|" # string offset=8457 .Linfo_string354: - .asciz "_Z2f1IJRKM3udtFvvEEEvv" # string offset=7788 + .asciz "_Z19operator_not_reallyIiEvv" # string offset=8477 .Linfo_string355: - .asciz "_STN|f1|" # string offset=7811 + .asciz "_STN|operator_not_really|" # string offset=8506 .Linfo_string356: - .asciz "_Z2f1IJFPFvfEiEEEvv" # string offset=7843 + .asciz "_BitInt(3)" # string offset=8537 .Linfo_string357: - .asciz "_STN|f1|" # string offset=7863 + .asciz "V" # string offset=8548 .Linfo_string358: - .asciz "_Z2f1IJA1_2t1IJiEEEEvv" # string offset=7893 + .asciz "_Z3f11IDB3_TnT_LS0_2EEvv" # string offset=8550 .Linfo_string359: - .asciz "_STN|f1|[1]>" # string offset=7916 + .asciz "_STN|f11|<_BitInt(3), (_BitInt(3))2>" # string offset=8575 .Linfo_string360: - .asciz "_Z2f1IJPDoFvvEEEvv" # string offset=7936 + .asciz "unsigned _BitInt(5)" # string offset=8612 .Linfo_string361: - .asciz "f1" # string offset=7955 + .asciz "_Z3f11IKDU5_TnT_LS0_2EEvv" # string offset=8632 .Linfo_string362: - .asciz "_Z2f1IJFvZ4mainE3$_2EEEvv" # string offset=7979 + .asciz "_STN|f11|" # string offset=8658 .Linfo_string363: - .asciz "f1" # string offset=8005 + .asciz "_BitInt(65)" # string offset=8719 .Linfo_string364: - .asciz "_Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv" # string offset=8129 + .asciz "_Z3f11IDB65_TnT_LS0_2EEvv" # string offset=8731 .Linfo_string365: - .asciz "f1" # string offset=8165 + .asciz "f11<_BitInt(65), (_BitInt(65))2>" # string offset=8757 .Linfo_string366: - .asciz "_Z2f1IJFvZ4mainE2t8EEEvv" # string offset=8293 + .asciz "unsigned _BitInt(65)" # string offset=8790 .Linfo_string367: - .asciz "_STN|f1|" # string offset=8318 + .asciz "_Z3f11IKDU65_TnT_LS0_2EEvv" # string offset=8811 .Linfo_string368: - .asciz "_Z19operator_not_reallyIiEvv" # string offset=8337 + .asciz "f11" # string offset=8838 .Linfo_string369: - .asciz "_STN|operator_not_really|" # string offset=8366 + .asciz "_STN|t1|<>" # string offset=8895 .Linfo_string370: - .asciz "_BitInt" # string offset=8396 + .asciz "_Z2f1IJFv2t1IJEES1_EEEvv" # string offset=8906 .Linfo_string371: - .asciz "_Z2f1IJDB3_EEvv" # string offset=8404 + .asciz "_STN|f1|, t1<>)>" # string offset=8931 .Linfo_string372: - .asciz "f1<_BitInt(3)>" # string offset=8420 + .asciz "_Z2f1IJM2t1IJEEiEEvv" # string offset=8959 .Linfo_string373: - .asciz "unsigned _BitInt" # string offset=8435 + .asciz "_STN|f1|::*>" # string offset=8980 .Linfo_string374: - .asciz "_Z2f1IJKDU5_EEvv" # string offset=8452 + .asciz "_Z2f1IJU9swiftcallFvvEEEvv" # string offset=9002 .Linfo_string375: - .asciz "f1" # string offset=8469 + .asciz "_STN|f1|" # string offset=9029 .Linfo_string376: - .asciz "_STN|t1|<>" # string offset=8499 + .asciz "_Z2f1IJFivEEEvv" # string offset=9074 .Linfo_string377: - .asciz "_Z2f1IJFv2t1IJEES1_EEEvv" # string offset=8509 + .asciz "f1" # string offset=9090 .Linfo_string378: - .asciz "_STN|f1|, t1<>)>" # string offset=8534 + .asciz "_Z3f10ILN2ns3$_0E0EEvv" # string offset=9127 .Linfo_string379: - .asciz "_Z2f1IJM2t1IJEEiEEvv" # string offset=8561 + .asciz "f10<(ns::(unnamed enum at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:31:1))0>" # string offset=9150 .Linfo_string380: - .asciz "_STN|f1|::*>" # string offset=8582 + .asciz "_Z2f1IJZN2t83memEvE2t7EEvv" # string offset=9272 .Linfo_string381: - .asciz "_Z2f1IJU9swiftcallFvvEEEvv" # string offset=8603 + .asciz "_Z2f1IJM2t8FvvEEEvv" # string offset=9299 .Linfo_string382: - .asciz "_STN|f1|" # string offset=8630 + .asciz "_STN|f1|" # string offset=9319 .Linfo_string383: - .asciz "_Z2f1IJZN2t83memEvE2t7EEvv" # string offset=8674 + .asciz "_ZN18complex_type_units2f1Ev" # string offset=9344 .Linfo_string384: - .asciz "_Z2f1IJM2t8FvvEEEvv" # string offset=8701 + .asciz "f1" # string offset=9373 .Linfo_string385: - .asciz "_STN|f1|" # string offset=8721 + .asciz "L" # string offset=9376 .Linfo_string386: - .asciz "L" # string offset=8745 + .asciz "v2" # string offset=9378 .Linfo_string387: - .asciz "v2" # string offset=8747 + .asciz "N" # string offset=9381 .Linfo_string388: - .asciz "N" # string offset=8750 + .asciz "_STN|t4|<3U>" # string offset=9383 .Linfo_string389: - .asciz "_STN|t4|<3U>" # string offset=8752 + .asciz "v1" # string offset=9396 .Linfo_string390: - .asciz "v1" # string offset=8764 + .asciz "v6" # string offset=9399 .Linfo_string391: - .asciz "v6" # string offset=8767 + .asciz "x" # string offset=9402 .Linfo_string392: - .asciz "x" # string offset=8770 + .asciz "t7i" # string offset=9404 .Linfo_string393: - .asciz "t7i" # string offset=8772 + .asciz "v3" # string offset=9408 .Linfo_string394: - .asciz "v3" # string offset=8776 + .asciz "v4" # string offset=9411 .Linfo_string395: - .asciz "v4" # string offset=8779 + .asciz "t11<(anonymous namespace)::LocalEnum, ((anonymous namespace)::LocalEnum)0>" # string offset=9414 .Linfo_string396: - .asciz "t11<(anonymous namespace)::LocalEnum, (anonymous namespace)::LocalEnum1>" # string offset=8782 + .asciz "t12" # string offset=9489 .Linfo_string397: - .asciz "t12" # string offset=8855 + .asciz "_STN|t2|" # string offset=9493 .Linfo_string398: - .asciz "_STN|t2|" # string offset=8859 + .asciz "_STN|t2|" # string offset=9507 .Linfo_string399: - .asciz "_STN|t2|" # string offset=8872 + .asciz "_STN|t1|" # string offset=9523 .Linfo_string400: - .asciz "_STN|t1|" # string offset=8887 + .asciz "_STN|t2|" # string offset=9538 .Linfo_string401: - .asciz "_STN|t2|" # string offset=8901 + .asciz "_STN|t1|" # string offset=9553 .Linfo_string402: - .asciz "_STN|t1|" # string offset=8915 + .asciz "_STN|t2|" # string offset=9570 .Linfo_string403: - .asciz "_STN|t2|" # string offset=8931 + .asciz "_STN|t1|" # string offset=9587 .Linfo_string404: - .asciz "_STN|t1|" # string offset=8947 + .asciz "_STN|t2|" # string offset=9602 .Linfo_string405: - .asciz "_STN|t2|" # string offset=8961 + .asciz "_STN|t1|" # string offset=9617 .Linfo_string406: - .asciz "_STN|t1|" # string offset=8975 + .asciz "_STN|t2|" # string offset=9633 .Linfo_string407: - .asciz "_STN|t2|" # string offset=8990 + .asciz "_STN|t1|" # string offset=9649 .Linfo_string408: - .asciz "_STN|t1|" # string offset=9005 + .asciz "_STN|t2|" # string offset=9672 .Linfo_string409: - .asciz "_STN|t2|" # string offset=9027 + .asciz "_STN|t1|" # string offset=9695 .Linfo_string410: - .asciz "_STN|t1|" # string offset=9049 + .asciz "_STN|t2|" # string offset=9724 .Linfo_string411: - .asciz "_STN|t2|" # string offset=9077 + .asciz "_STN|t1|" # string offset=9753 .Linfo_string412: - .asciz "_STN|t1|" # string offset=9105 + .asciz "_STN|t2|" # string offset=9773 .Linfo_string413: - .asciz "_STN|t2|" # string offset=9124 + .asciz "_STN|t1|" # string offset=9793 .Linfo_string414: - .asciz "_STN|t1|" # string offset=9143 + .asciz "_STN|t2|" # string offset=9807 .Linfo_string415: - .asciz "_STN|t2|" # string offset=9156 + .asciz "_STN|t1|" # string offset=9821 .Linfo_string416: - .asciz "_STN|t1|" # string offset=9169 + .asciz "_STN|t2|" # string offset=9839 .Linfo_string417: - .asciz "_STN|t2|" # string offset=9186 + .asciz "_STN|t1|" # string offset=9857 .Linfo_string418: - .asciz "_STN|t1|" # string offset=9203 + .asciz "_STN|t2|" # string offset=9877 .Linfo_string419: - .asciz "_STN|t2|" # string offset=9222 + .asciz "_STN|t1|" # string offset=9897 .Linfo_string420: - .asciz "_STN|t1|" # string offset=9241 + .asciz "_STN|t2|" # string offset=9922 .Linfo_string421: - .asciz "_STN|t2|" # string offset=9265 + .asciz "_STN|t1| >" # string offset=9947 .Linfo_string422: - .asciz "_STN|t1| >" # string offset=9289 + .asciz "_STN|t2| >" # string offset=9966 .Linfo_string423: - .asciz "_STN|t2| >" # string offset=9307 + .asciz "_STN|t1|" # string offset=9985 .Linfo_string424: - .asciz "_STN|t1|" # string offset=9325 + .asciz "_STN|t2|" # string offset=10006 .Linfo_string425: - .asciz "_STN|t2|" # string offset=9345 + .asciz "_STN|t2|" # string offset=10027 .Linfo_string426: - .asciz "_STN|t2|" # string offset=9365 + .asciz "_STN|t1|" # string offset=10043 .Linfo_string427: - .asciz "_STN|t1|" # string offset=9380 + .asciz "_STN|t2|" # string offset=10059 .Linfo_string428: - .asciz "_STN|t2|" # string offset=9395 + .asciz "_STN|t1|" # string offset=10075 .Linfo_string429: - .asciz "_STN|t1|" # string offset=9410 + .asciz "_STN|t2|" # string offset=10092 .Linfo_string430: - .asciz "_STN|t2|" # string offset=9426 + .asciz "_STN|t1|" # string offset=10109 .Linfo_string431: - .asciz "_STN|t1|" # string offset=9442 + .asciz "_STN|t2|" # string offset=10129 .Linfo_string432: - .asciz "_STN|t2|" # string offset=9461 + .asciz "_STN|t1|" # string offset=10149 .Linfo_string433: - .asciz "_STN|t1|" # string offset=9480 + .asciz "_STN|t2|" # string offset=10166 .Linfo_string434: - .asciz "_STN|t2|" # string offset=9496 + .asciz "_STN|t1|" # string offset=10183 .Linfo_string435: - .asciz "_STN|t1|" # string offset=9512 + .asciz "_STN|t2|" # string offset=10198 .Linfo_string436: - .asciz "_STN|t2|" # string offset=9526 + .asciz "_STN|t1|" # string offset=10213 .Linfo_string437: - .asciz "_STN|t1|" # string offset=9540 + .asciz "_STN|t2|" # string offset=10248 .Linfo_string438: - .asciz "_STN|t2|" # string offset=9574 + .asciz "_STN|t1|" # string offset=10283 .Linfo_string439: - .asciz "_STN|t1|" # string offset=9608 + .asciz "_STN|t2|" # string offset=10307 .Linfo_string440: - .asciz "_STN|t2|" # string offset=9631 + .asciz "_STN|t1| >" # string offset=10331 .Linfo_string441: - .asciz "_STN|t1| >" # string offset=9654 + .asciz "_STN|t2| >" # string offset=10357 .Linfo_string442: - .asciz "_STN|t2| >" # string offset=9679 + .asciz "_STN|t1|, false> >" # string offset=10383 .Linfo_string443: - .asciz "_STN|t1|, false> >" # string offset=9704 + .asciz "_STN|t2|, false> >" # string offset=10420 .Linfo_string444: - .asciz "_STN|t2|, false> >" # string offset=9740 + .asciz "t2<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12)>" # string offset=10457 .Linfo_string445: - .asciz "t2<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12)>" # string offset=9776 + .asciz "t1, false> >" # string offset=10567 .Linfo_string446: - .asciz "t1, false> >" # string offset=9886 + .asciz "t2, false> >" # string offset=10700 .Linfo_string447: - .asciz "t2, false> >" # string offset=10019 + .asciz "_STN|t1|" # string offset=10833 .Linfo_string448: - .asciz "_STN|t1|" # string offset=10152 + .asciz "_STN|t2|" # string offset=10855 .Linfo_string449: - .asciz "_STN|t2|" # string offset=10173 + .asciz "_STN|t1|" # string offset=10877 .Linfo_string450: - .asciz "_STN|t1|" # string offset=10194 + .asciz "_STN|t2|" # string offset=10898 .Linfo_string451: - .asciz "_STN|t2|" # string offset=10214 + .asciz "_STN|t1|" # string offset=10919 .Linfo_string452: - .asciz "_STN|t1|" # string offset=10234 + .asciz "_STN|t2|" # string offset=10945 .Linfo_string453: - .asciz "_STN|t2|" # string offset=10259 + .asciz "_STN|t1|" # string offset=10971 .Linfo_string454: - .asciz "_STN|t1|" # string offset=10284 + .asciz "_STN|t2|" # string offset=10993 .Linfo_string455: - .asciz "_STN|t2|" # string offset=10305 + .asciz "_STN|t1|" # string offset=11015 .Linfo_string456: - .asciz "_STN|t1|" # string offset=10326 + .asciz "_STN|t2|" # string offset=11038 .Linfo_string457: - .asciz "_STN|t2|" # string offset=10348 + .asciz "_STN|t1|<(anonymous namespace)::t5>" # string offset=11061 .Linfo_string458: - .asciz "_STN|t1|<(anonymous namespace)::t5>" # string offset=10370 + .asciz "_STN|t2|<(anonymous namespace)::t5>" # string offset=11097 .Linfo_string459: - .asciz "_STN|t2|<(anonymous namespace)::t5>" # string offset=10405 + .asciz "_STN|t1|" # string offset=11133 .Linfo_string460: - .asciz "_STN|t1|" # string offset=10440 + .asciz "_STN|t2|" # string offset=11158 .Linfo_string461: - .asciz "_STN|t2|" # string offset=10464 + .asciz "_STN|t1|" # string offset=11183 .Linfo_string462: - .asciz "_STN|t1|" # string offset=10488 + .asciz "_STN|t2|" # string offset=11208 .Linfo_string463: - .asciz "_STN|t2|" # string offset=10512 + .asciz "_STN|t1|" # string offset=11233 .Linfo_string464: - .asciz "_STN|t1|" # string offset=10536 + .asciz "_STN|t2|" # string offset=11257 .Linfo_string465: - .asciz "_STN|t2|" # string offset=10559 + .asciz "_STN|t1|" # string offset=11281 .Linfo_string466: - .asciz "_STN|t1|" # string offset=10582 + .asciz "_STN|t2|" # string offset=11303 .Linfo_string467: - .asciz "_STN|t2|" # string offset=10603 + .asciz "_STN|t1|" # string offset=11325 .Linfo_string468: - .asciz "_STN|t1|" # string offset=10624 + .asciz "_STN|t2|" # string offset=11355 .Linfo_string469: - .asciz "_STN|t2|" # string offset=10653 + .asciz "_STN|t1|" # string offset=11385 .Linfo_string470: - .asciz "_STN|t1|" # string offset=10682 + .asciz "_STN|t2|" # string offset=11403 .Linfo_string471: - .asciz "_STN|t2|" # string offset=10699 + .asciz "_STN|t1|" # string offset=11421 .Linfo_string472: - .asciz "_STN|t1|" # string offset=10716 + .asciz "_STN|t2|" # string offset=11442 .Linfo_string473: - .asciz "_STN|t2|" # string offset=10736 + .asciz "t1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12) *>" # string offset=11463 .Linfo_string474: - .asciz "t1<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12) *>" # string offset=10756 + .asciz "t2<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:192:12) *>" # string offset=11575 .Linfo_string475: - .asciz "t2<(lambda at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:184:12) *>" # string offset=10868 + .asciz "t1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3)>" # string offset=11687 .Linfo_string476: - .asciz "t1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3)>" # string offset=10980 + .asciz "t2<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3)>" # string offset=11804 .Linfo_string477: - .asciz "t2<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3)>" # string offset=11097 + .asciz "t1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3) *>" # string offset=11921 .Linfo_string478: - .asciz "t1<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3) *>" # string offset=11214 + .asciz "t2<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:191:3) *>" # string offset=12040 .Linfo_string479: - .asciz "t2<(unnamed struct at cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp:183:3) *>" # string offset=11333 + .asciz "_STN|t2|<>" # string offset=12159 .Linfo_string480: - .asciz "_STN|t2|<>" # string offset=11452 + .asciz "_STN|t1|" # string offset=12170 .Linfo_string481: - .asciz "_STN|t1|" # string offset=11462 + .asciz "_STN|t2|" # string offset=12207 .Linfo_string482: - .asciz "_STN|t2|" # string offset=11498 + .asciz "_STN|t1| *>" # string offset=12244 .Linfo_string483: - .asciz "_STN|t1| *>" # string offset=11534 + .asciz "_STN|t2| *>" # string offset=12266 .Linfo_string484: - .asciz "_STN|t2| *>" # string offset=11555 + .asciz "_STN|t1|" # string offset=12288 .Linfo_string485: - .asciz "_STN|t1|" # string offset=11576 + .asciz "_STN|t2|" # string offset=12306 .Linfo_string486: - .asciz "_STN|t2|" # string offset=11593 + .asciz "this" # string offset=12324 .Linfo_string487: - .asciz "this" # string offset=11610 + .asciz "_STN|t1|" # string offset=12329 .Linfo_string488: - .asciz "_STN|t1|" # string offset=11615 + .asciz "_STN|t2|" # string offset=12342 .Linfo_string489: - .asciz "_STN|t2|" # string offset=11627 + .asciz "_STN|t1|" # string offset=12355 .Linfo_string490: - .asciz "_STN|t1|" # string offset=11639 + .asciz "_STN|t2|" # string offset=12376 .Linfo_string491: - .asciz "_STN|t2|" # string offset=11659 + .asciz "_STN|t1|" # string offset=12397 .Linfo_string492: - .asciz "_STN|t1|" # string offset=11679 + .asciz "_STN|t2|" # string offset=12418 .Linfo_string493: - .asciz "_STN|t2|" # string offset=11699 + .asciz "_STN|t1|" # string offset=12439 .Linfo_string494: - .asciz "_STN|t1|" # string offset=11719 + .asciz "_STN|t2|" # string offset=12473 .Linfo_string495: - .asciz "_STN|t2|" # string offset=11752 + .asciz "_STN|t1| >" # string offset=12507 .Linfo_string496: - .asciz "_STN|t1| >" # string offset=11785 + .asciz "_STN|t2| >" # string offset=12526 .Linfo_string497: - .asciz "_STN|t2| >" # string offset=11803 + .asciz "t1<_Atomic(int)>" # string offset=12545 .Linfo_string498: - .asciz "t1<_Atomic(int)>" # string offset=11821 + .asciz "t2<_Atomic(int)>" # string offset=12562 .Linfo_string499: - .asciz "t2<_Atomic(int)>" # string offset=11838 + .asciz "_STN|t1|" # string offset=12579 .Linfo_string500: - .asciz "_STN|t1|" # string offset=11855 + .asciz "_STN|t2|" # string offset=12614 .Linfo_string501: - .asciz "_STN|t2|" # string offset=11889 + .asciz "t1<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=12649 .Linfo_string502: - .asciz "t1<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=11923 + .asciz "t2<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=12707 .Linfo_string503: - .asciz "t2<__attribute__((__vector_size__(2 * sizeof(int)))) int>" # string offset=11981 + .asciz "_STN|t1|" # string offset=12765 .Linfo_string504: - .asciz "_STN|t1|" # string offset=12039 + .asciz "_STN|t2|" # string offset=12795 .Linfo_string505: - .asciz "_STN|t2|" # string offset=12068 + .asciz "_STN|t1|" # string offset=12825 .Linfo_string506: - .asciz "_STN|t1|" # string offset=12097 + .asciz "_STN|t2|" # string offset=12855 .Linfo_string507: - .asciz "_STN|t2|" # string offset=12126 + .asciz "t1 >" # string offset=12885 .Linfo_string508: - .asciz "t1 >" # string offset=12155 + .asciz "t2 >" # string offset=13000 .Linfo_string509: - .asciz "t2 >" # string offset=12270 + .asciz "_STN|t1|" # string offset=13115 .Linfo_string510: - .asciz "_STN|t1|" # string offset=12385 + .asciz "_STN|t2|" # string offset=13147 .Linfo_string511: - .asciz "_STN|t2|" # string offset=12416 + .asciz "_STN|t1|" # string offset=13179 .Linfo_string512: - .asciz "_STN|t1|" # string offset=12447 + .asciz "_STN|t2|" # string offset=13216 .Linfo_string513: - .asciz "_STN|t2|" # string offset=12483 + .asciz "_STN|t1|" # string offset=13253 .Linfo_string514: - .asciz "_STN|t1|" # string offset=12519 + .asciz "_STN|t2|" # string offset=13297 .Linfo_string515: - .asciz "_STN|t2|" # string offset=12562 + .asciz "_STN|t1|" # string offset=13341 .Linfo_string516: - .asciz "_STN|t1|" # string offset=12605 + .asciz "_STN|t2|" # string offset=13367 .Linfo_string517: - .asciz "_STN|t2|" # string offset=12630 + .asciz "_STN|t1|" # string offset=13393 .Linfo_string518: - .asciz "_STN|t1|" # string offset=12655 + .asciz "_STN|t2|" # string offset=13421 .Linfo_string519: - .asciz "_STN|t2|" # string offset=12682 + .asciz "_STN|t1|" # string offset=13449 .Linfo_string520: - .asciz "_STN|t1|" # string offset=12709 + .asciz "_STN|t2|" # string offset=13475 .Linfo_string521: - .asciz "_STN|t2|" # string offset=12734 + .asciz "_STN|t1|" # string offset=13501 .Linfo_string522: - .asciz "_STN|t1|" # string offset=12759 + .asciz "_STN|t2|" # string offset=13531 .Linfo_string523: - .asciz "_STN|t2|" # string offset=12788 + .asciz "_STN|t1|" # string offset=13561 .Linfo_string524: - .asciz "_STN|t1|" # string offset=12817 + .asciz "_STN|t2|" # string offset=13594 .Linfo_string525: - .asciz "_STN|t2|" # string offset=12849 + .asciz "_STN|t1|" # string offset=13627 .Linfo_string526: - .asciz "_STN|t1|" # string offset=12881 + .asciz "_STN|t2|" # string offset=13651 .Linfo_string527: - .asciz "_STN|t2|" # string offset=12904 + .asciz "_STN|t1|" # string offset=13675 .Linfo_string528: - .asciz "_STN|t1|" # string offset=12927 + .asciz "_STN|t2|" # string offset=13703 .Linfo_string529: - .asciz "_STN|t2|" # string offset=12954 + .asciz "_STN|t1|" # string offset=13731 .Linfo_string530: - .asciz "_STN|t1|" # string offset=12981 + .asciz "_STN|t2|" # string offset=13764 .Linfo_string531: - .asciz "_STN|t2|" # string offset=13013 + .asciz "_STN|t1|" # string offset=13797 .Linfo_string532: - .asciz "_STN|t1|" # string offset=13045 + .asciz "_STN|t2|" # string offset=13828 .Linfo_string533: - .asciz "_STN|t2|" # string offset=13075 + .asciz "_STN|t1|[1]>" # string offset=13859 .Linfo_string534: - .asciz "_STN|t1|[1]>" # string offset=13105 + .asciz "_STN|t2|[1]>" # string offset=13880 .Linfo_string535: - .asciz "_STN|t2|[1]>" # string offset=13125 + .asciz "t1" # string offset=13901 .Linfo_string536: - .asciz "t1" # string offset=13145 + .asciz "t2" # string offset=13925 .Linfo_string537: - .asciz "t2" # string offset=13169 + .asciz "t1" # string offset=13949 .Linfo_string538: - .asciz "t1" # string offset=13193 + .asciz "t2" # string offset=14073 .Linfo_string539: - .asciz "t2" # string offset=13317 + .asciz "t1" # string offset=14197 .Linfo_string540: - .asciz "t1" # string offset=13441 + .asciz "t2" # string offset=14325 .Linfo_string541: - .asciz "t2" # string offset=13569 + .asciz "_STN|t1|" # string offset=14453 .Linfo_string542: - .asciz "_STN|t1|" # string offset=13697 + .asciz "_STN|t2|" # string offset=14473 .Linfo_string543: - .asciz "_STN|t2|" # string offset=13716 + .asciz "_STN|t1|, t1<>)>" # string offset=14493 .Linfo_string544: - .asciz "t1<_BitInt(3)>" # string offset=13735 + .asciz "_STN|t2|, t1<>)>" # string offset=14521 .Linfo_string545: - .asciz "t2<_BitInt(3)>" # string offset=13750 + .asciz "_STN|t1|::*>" # string offset=14549 .Linfo_string546: - .asciz "t1" # string offset=13765 + .asciz "_STN|t2|::*>" # string offset=14571 .Linfo_string547: - .asciz "t2" # string offset=13795 + .asciz "_STN|t1|" # string offset=14593 .Linfo_string548: - .asciz "_STN|t1|, t1<>)>" # string offset=13825 + .asciz "_STN|t2|" # string offset=14638 .Linfo_string549: - .asciz "_STN|t2|, t1<>)>" # string offset=13852 + .asciz "t1" # string offset=14683 .Linfo_string550: - .asciz "_STN|t1|::*>" # string offset=13879 + .asciz "t2" # string offset=14720 .Linfo_string551: - .asciz "_STN|t2|::*>" # string offset=13900 + .asciz "_STN|t1|" # string offset=14757 .Linfo_string552: - .asciz "_STN|t1|" # string offset=13921 + .asciz "_STN|t2|" # string offset=14782 .Linfo_string553: - .asciz "_STN|t2|" # string offset=13965 + .asciz "internal_type" # string offset=14807 .Linfo_string554: - .asciz "_STN|t1|" # string offset=14009 + .asciz "t2<&complex_type_units::external_function>" # string offset=14821 .Linfo_string555: - .asciz "_STN|t2|" # string offset=14033 + .asciz "_STN|t3| >" # string offset=14864 +.Linfo_string556: + .asciz "_STN|t4| > >" # string offset=14938 .section .debug_str_offsets,"",@progbits .long .Linfo_string0 .long .Linfo_string1 @@ -13876,6 +14165,7 @@ i: .long .Linfo_string553 .long .Linfo_string554 .long .Linfo_string555 + .long .Linfo_string556 .section .debug_addr,"",@progbits .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution .Ldebug_addr_start0: @@ -14022,8 +14312,14 @@ i: .quad .Lfunc_begin135 .quad .Lfunc_begin136 .quad .Lfunc_begin137 + .quad .Lfunc_begin138 + .quad .Lfunc_begin139 + .quad .Lfunc_begin140 + .quad .Lfunc_begin141 + .quad .Lfunc_begin142 + .quad _ZN18complex_type_units17external_functionEv .Ldebug_addr_end0: - .ident "clang version 15.0.0 (git@github.com:llvm/llvm-project.git 4e115b7d881136947c083e12f62010bc6b1d3f00)" + .ident "clang version 22.0.0git (git@github.com:Michael137/llvm-project.git f45bb984e6f21e702b4d65f1eeea1429f43c800e)" .section ".note.GNU-stack","",@progbits .addrsig .addrsig_sym _Zli5_suffy @@ -14051,28 +14347,28 @@ i: .addrsig_sym _Z2f1IJN11outer_class11inner_classEEEvv .addrsig_sym _Z2f1IJmEEvv .addrsig_sym _Z2f2ILb1ELi3EEvv - .addrsig_sym _Z2f3IN2ns11EnumerationEJLS1_1ELS1_2EEEvv - .addrsig_sym _Z2f3IN2ns16EnumerationClassEJLS1_1ELS1_2EEEvv - .addrsig_sym _Z2f3IN2ns16EnumerationSmallEJLS1_255EEEvv - .addrsig_sym _Z2f3IN2ns3$_0EJLS1_1ELS1_2EEEvv - .addrsig_sym _Z2f3IN12_GLOBAL__N_19LocalEnumEJLS1_0EEEvv - .addrsig_sym _Z2f3IPiJXadL_Z1iEEEEvv - .addrsig_sym _Z2f3IPiJLS0_0EEEvv - .addrsig_sym _Z2f3ImJLm1EEEvv - .addrsig_sym _Z2f3IyJLy1EEEvv - .addrsig_sym _Z2f3IlJLl1EEEvv - .addrsig_sym _Z2f3IjJLj1EEEvv - .addrsig_sym _Z2f3IsJLs1EEEvv - .addrsig_sym _Z2f3IhJLh0EEEvv - .addrsig_sym _Z2f3IaJLa0EEEvv - .addrsig_sym _Z2f3ItJLt1ELt2EEEvv - .addrsig_sym _Z2f3IcJLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv - .addrsig_sym _Z2f3InJLn18446744073709551614EEEvv + .addrsig_sym _Z2f3IN2ns11EnumerationETpTnT_JLS1_1ELS1_2EEEvv + .addrsig_sym _Z2f3IN2ns16EnumerationClassETpTnT_JLS1_1ELS1_2EEEvv + .addrsig_sym _Z2f3IN2ns16EnumerationSmallETpTnT_JLS1_255EEEvv + .addrsig_sym _Z2f3IN2ns3$_0ETpTnT_JLS1_1ELS1_2EEEvv + .addrsig_sym _Z2f3IN12_GLOBAL__N_19LocalEnumETpTnT_JLS1_0EEEvv + .addrsig_sym _Z2f3IPiTpTnT_JXadL_Z1iEEEEvv + .addrsig_sym _Z2f3IPiTpTnT_JLS0_0EEEvv + .addrsig_sym _Z2f3ImTpTnT_JLm1EEEvv + .addrsig_sym _Z2f3IyTpTnT_JLy1EEEvv + .addrsig_sym _Z2f3IlTpTnT_JLl1EEEvv + .addrsig_sym _Z2f3IjTpTnT_JLj1EEEvv + .addrsig_sym _Z2f3IsTpTnT_JLs1EEEvv + .addrsig_sym _Z2f3IhTpTnT_JLh0EEEvv + .addrsig_sym _Z2f3IaTpTnT_JLa0EEEvv + .addrsig_sym _Z2f3ItTpTnT_JLt1ELt2EEEvv + .addrsig_sym _Z2f3IcTpTnT_JLc0ELc1ELc6ELc7ELc13ELc14ELc31ELc32ELc33ELc127ELcn128EEEvv + .addrsig_sym _Z2f3InTpTnT_JLn18446744073709551614EEEvv .addrsig_sym _Z2f4IjLj3EEvv .addrsig_sym _Z2f1IJ2t3IiLb0EEEEvv .addrsig_sym _Z2f1IJ2t3IS0_IiLb0EELb0EEEEvv - .addrsig_sym _Z2f1IJZ4mainE3$_1EEvv - .addrsig_sym _Z2f1IJ2t3IS0_IZ4mainE3$_1Lb0EELb0EEEEvv + .addrsig_sym _Z2f1IJZ4mainE3$_0EEvv + .addrsig_sym _Z2f1IJ2t3IS0_IZ4mainE3$_0Lb0EELb0EEEEvv .addrsig_sym _Z2f1IJFifEEEvv .addrsig_sym _Z2f1IJFvzEEEvv .addrsig_sym _Z2f1IJFvizEEEvv @@ -14086,9 +14382,9 @@ i: .addrsig_sym _Z2f1IJPKPKvEEvv .addrsig_sym _Z2f1IJFvvEEEvv .addrsig_sym _Z2f1IJPFvvEEEvv + .addrsig_sym _Z2f1IJPZ4mainE3$_0EEvv + .addrsig_sym _Z2f1IJZ4mainE3$_1EEvv .addrsig_sym _Z2f1IJPZ4mainE3$_1EEvv - .addrsig_sym _Z2f1IJZ4mainE3$_2EEvv - .addrsig_sym _Z2f1IJPZ4mainE3$_2EEvv .addrsig_sym _Z2f5IJ2t1IJiEEEiEvv .addrsig_sym _Z2f5IJEiEvv .addrsig_sym _Z2f6I2t1IJiEEJEEvv @@ -14128,13 +14424,13 @@ i: .addrsig_sym _ZN2ns8ttp_userINS_5inner3ttpEEEvv .addrsig_sym _Z2f1IJPiPDnEEvv .addrsig_sym _Z2f1IJ2t7IiEEEvv - .addrsig_sym _Z2f7IN2ns3inl2t9EEvv + .addrsig_sym _Z2f7ITtTpTyEN2ns3inl2t9EEvv .addrsig_sym _Z2f1IJU7_AtomiciEEvv .addrsig_sym _Z2f1IJilVcEEvv .addrsig_sym _Z2f1IJDv2_iEEvv .addrsig_sym _Z2f1IJVKPiEEvv .addrsig_sym _Z2f1IJVKvEEvv - .addrsig_sym _Z2f1IJ2t1IJZ4mainE3$_1EEEEvv + .addrsig_sym _Z2f1IJ2t1IJZ4mainE3$_0EEEEvv .addrsig_sym _Z2f1IJM3udtKFvvEEEvv .addrsig_sym _Z2f1IJM3udtVFvvREEEvv .addrsig_sym _Z2f1IJM3udtVKFvvOEEEvv @@ -14150,15 +14446,19 @@ i: .addrsig_sym _Z2f1IJFPFvfEiEEEvv .addrsig_sym _Z2f1IJA1_2t1IJiEEEEvv .addrsig_sym _Z2f1IJPDoFvvEEEvv - .addrsig_sym _Z2f1IJFvZ4mainE3$_2EEEvv - .addrsig_sym _Z2f1IJFvZ4mainE2t8Z4mainE3$_2EEEvv + .addrsig_sym _Z2f1IJFvZ4mainE3$_1EEEvv + .addrsig_sym _Z2f1IJFvZ4mainE2t8Z4mainE3$_1EEEvv .addrsig_sym _Z2f1IJFvZ4mainE2t8EEEvv .addrsig_sym _Z19operator_not_reallyIiEvv - .addrsig_sym _Z2f1IJDB3_EEvv - .addrsig_sym _Z2f1IJKDU5_EEvv + .addrsig_sym _Z3f11IDB3_TnT_LS0_2EEvv + .addrsig_sym _Z3f11IKDU5_TnT_LS0_2EEvv + .addrsig_sym _Z3f11IDB65_TnT_LS0_2EEvv + .addrsig_sym _Z3f11IKDU65_TnT_LS0_2EEvv .addrsig_sym _Z2f1IJFv2t1IJEES1_EEEvv .addrsig_sym _Z2f1IJM2t1IJEEiEEvv .addrsig_sym _Z2f1IJU9swiftcallFvvEEEvv + .addrsig_sym _Z2f1IJFivEEEvv + .addrsig_sym _Z3f10ILN2ns3$_0E0EEvv .addrsig_sym _Z2f1IJZN2t83memEvE2t7EEvv .addrsig_sym _Z2f1IJM2t8FvvEEEvv .section .debug_line,"",@progbits From 3f6cbdea4fecf11ffa4fa29151c69f53c7a59bf7 Mon Sep 17 00:00:00 2001 From: Andrew Haberlandt Date: Wed, 19 Nov 2025 15:06:18 -0800 Subject: [PATCH 42/48] [lit] Add LIT_CURRENT_TESTCASE environment variable when running tests (#168762) I'm not aware of any way for `%run` wrapper scripts like `iosssim_run.py` ([ref](https://github.com/llvm/llvm-project/blob/d2c7c6064259320def7a74e111079725958697d4/compiler-rt/test/sanitizer_common/ios_commands/iossim_run.py#L4)) to know what testcase they are currently running. This can be useful if these wrappers need to create a (potentially remote) temporary directory for each test case. This adds the `LIT_CURRENT_TESTCASE` environment variable to both the internal shell and the external shell, containing the full name of the current test being run. --- llvm/utils/lit/lit/TestRunner.py | 6 +++++- .../shtest-env-positive/env-current-testcase.txt | 6 ++++++ .../Inputs/shtest-env-positive/env-no-subcommand.txt | 1 + llvm/utils/lit/tests/shtest-env-positive.py | 11 ++++++++--- 4 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 llvm/utils/lit/tests/Inputs/shtest-env-positive/env-current-testcase.txt diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py index 64148c6098327..9525320f133c6 100644 --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -1226,6 +1226,8 @@ def executeScriptInternal( results = [] timeoutInfo = None shenv = ShellEnvironment(cwd, test.config.environment) + shenv.env["LIT_CURRENT_TESTCASE"] = test.getFullName() + exitCode, timeoutInfo = executeShCmd( cmd, shenv, results, timeout=litConfig.maxIndividualTestTime ) @@ -1425,11 +1427,13 @@ def executeScript(test, litConfig, tmpBase, commands, cwd): # run on clang with no real loss. command = litConfig.valgrindArgs + command + env = dict(test.config.environment) + env["LIT_CURRENT_TESTCASE"] = test.getFullName() try: out, err, exitCode = lit.util.executeCommand( command, cwd=cwd, - env=test.config.environment, + env=env, timeout=litConfig.maxIndividualTestTime, ) return (out, err, exitCode, None) diff --git a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-current-testcase.txt b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-current-testcase.txt new file mode 100644 index 0000000000000..37c36814ccbbb --- /dev/null +++ b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-current-testcase.txt @@ -0,0 +1,6 @@ +## Tests that the LIT_CURRENT_TESTCASE variable is set to the name of the currently executing testcase + +## Check default environment. +# RUN: bash -c 'echo $LIT_CURRENT_TESTCASE' | FileCheck --match-full-lines %s +# +# CHECK: shtest-env :: env-current-testcase.txt diff --git a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt index 761a8061a0b0d..dded9069c44f2 100644 --- a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt +++ b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt @@ -1,4 +1,5 @@ ## Tests the env command in various scenarios: without arguments, setting, unsetting, and mixing envrionment variables. +# FIXME: All of these tests are broken and will not even call FileCheck. ## Check default environment. # RUN: env | FileCheck -check-prefix=NO-ARGS %s diff --git a/llvm/utils/lit/tests/shtest-env-positive.py b/llvm/utils/lit/tests/shtest-env-positive.py index 089acd308c5c5..62e15dd9ad492 100644 --- a/llvm/utils/lit/tests/shtest-env-positive.py +++ b/llvm/utils/lit/tests/shtest-env-positive.py @@ -7,7 +7,7 @@ ## Test the env command's successful executions. -# CHECK: -- Testing: 10 tests{{.*}} +# CHECK: -- Testing: 11 tests{{.*}} # CHECK: PASS: shtest-env :: env-args-last-is-assign.txt ({{[^)]*}}) # CHECK: env FOO=1 @@ -39,6 +39,11 @@ # CHECK-NOT: # error: # CHECK: -- +# CHECK: PASS: shtest-env :: env-current-testcase.txt ({{[^)]*}}) +# CHECK: # executed command: bash -c 'echo $LIT_CURRENT_TESTCASE' +# CHECK-NOT: # error: +# CHECK: -- + # CHECK: PASS: shtest-env :: env-i.txt ({{[^)]*}}) # CHECK: env -i | {{.*}} # CHECK: # executed command: env -i @@ -71,6 +76,6 @@ # CHECK-NOT: # error: # CHECK: -- -# CHECK: Total Discovered Tests: 10 -# CHECK: Passed: 10 {{\([0-9]*\.[0-9]*%\)}} +# CHECK: Total Discovered Tests: 11 +# CHECK: Passed: 11 {{\([0-9]*\.[0-9]*%\)}} # CHECK-NOT: {{.}} From 7e85b790b02a770a003dbb13a7476590d045f58e Mon Sep 17 00:00:00 2001 From: anoopkg6 Date: Wed, 19 Nov 2025 17:07:43 -0600 Subject: [PATCH 43/48] [SystemZ] Fix linux s390x main can't bootstrap itself on SanitizerSpecialCaseList.cpp #168088 (#168779) This test has long call chain in recursion. Search tree can be pruned early by swapping CC test and recursive simplifyAssumingCCVal. Fixes: https://github.com/llvm/llvm-project/issues/168088 Co-authored-by: anoopkg6 --- llvm/lib/Target/SystemZ/SystemZISelLowering.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp index 06501b745b3f7..eb93024bed35c 100644 --- a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp +++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp @@ -8673,15 +8673,17 @@ SmallVector static simplifyAssumingCCVal(SDValue &Val, SDValue &CC, int CCValidVal = CCValid->getZExtValue(); int CCMaskVal = CCMask->getZExtValue(); - const auto &&TrueSDVals = simplifyAssumingCCVal(TrueVal, CC, DAG); - const auto &&FalseSDVals = simplifyAssumingCCVal(FalseVal, CC, DAG); - if (TrueSDVals.empty() || FalseSDVals.empty()) - return {}; + // Pruning search tree early - Moving CC test and combineCCMask ahead of + // recursive call to simplifyAssumingCCVal. SDValue Op4CCReg = Val.getOperand(4); if (Op4CCReg != CC) combineCCMask(Op4CCReg, CCValidVal, CCMaskVal, DAG); if (Op4CCReg != CC) return {}; + const auto &&TrueSDVals = simplifyAssumingCCVal(TrueVal, CC, DAG); + const auto &&FalseSDVals = simplifyAssumingCCVal(FalseVal, CC, DAG); + if (TrueSDVals.empty() || FalseSDVals.empty()) + return {}; SmallVector MergedSDVals; for (auto &CCVal : {0, 1, 2, 3}) MergedSDVals.emplace_back(((CCMaskVal & (1 << (3 - CCVal))) != 0) From be955e5ac9a0b0c979221efb28b0f52aad7bd3d6 Mon Sep 17 00:00:00 2001 From: erichkeane Date: Wed, 19 Nov 2025 14:52:54 -0800 Subject: [PATCH 44/48] [OpenACC] Make sure 'link' gets the right node in the AST with ASE Another miss when working through 'link', we didn't properly handle giving the whole array-section expression or array index expression, instead allowed it to only get the decl-ref-expr. This patch makes sure we don't add the wrong thing. --- clang/lib/Sema/SemaOpenACCClause.cpp | 4 +++- clang/test/SemaOpenACC/declare-construct-ast.cpp | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaOpenACCClause.cpp b/clang/lib/Sema/SemaOpenACCClause.cpp index 2a54d984cdffb..8091d91c66464 100644 --- a/clang/lib/Sema/SemaOpenACCClause.cpp +++ b/clang/lib/Sema/SemaOpenACCClause.cpp @@ -2249,6 +2249,8 @@ SemaOpenACC::CheckLinkClauseVarList(ArrayRef VarExprs) { continue; } + Expr *OrigExpr = VarExpr; + while (isa(VarExpr)) { if (auto *ASE = dyn_cast(VarExpr)) VarExpr = ASE->getBase()->IgnoreParenImpCasts(); @@ -2263,7 +2265,7 @@ SemaOpenACC::CheckLinkClauseVarList(ArrayRef VarExprs) { if (!Var || !Var->hasExternalStorage()) Diag(VarExpr->getBeginLoc(), diag::err_acc_link_not_extern); else - NewVarList.push_back(VarExpr); + NewVarList.push_back(OrigExpr); } return NewVarList; diff --git a/clang/test/SemaOpenACC/declare-construct-ast.cpp b/clang/test/SemaOpenACC/declare-construct-ast.cpp index 54b40ff6e93de..e39a436f5624b 100644 --- a/clang/test/SemaOpenACC/declare-construct-ast.cpp +++ b/clang/test/SemaOpenACC/declare-construct-ast.cpp @@ -49,6 +49,12 @@ int GlobalArray3[5]; // CHECK-NEXT: DeclRefExpr{{.*}}'Global3' 'int' // CHECK-NEXT: device_resident clause // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray3' 'int[5]' +int GlobalArray4[5]; +// CHECK-NEXT: VarDecl{{.*}}GlobalArray4 'int[5]' +#pragma acc declare link(GlobalArray4[1:1]) +// CHECK-NEXT: OpenACCDeclareDecl +// CHECK-NEXT: link clause +// CHECK-NEXT: ArraySectionExpr namespace NS { int NSVar; From db1e73ea6d9390c811ab7d41d9ceefb2620be668 Mon Sep 17 00:00:00 2001 From: Michael Buch Date: Wed, 19 Nov 2025 23:42:22 +0000 Subject: [PATCH 45/48] [clang][DebugInfo] Mark _BitInt's as reconstitutable when emitting -gsimple-template-names (#168383) Depends on: * https://github.com/llvm/llvm-project/pull/168382 As of recent, LLVM includes the bit-size as a `DW_AT_bit_size` (and as part of `DW_AT_name`) of `_BitInt`s in DWARF. This allows us to mark `_BitInt`s as "reconstitutable" when compiling with `-gsimple-template-names`. We still only omit template parameters that are `<= 64` bit wide. So support `_BitInt`s larger than 64 bits is not part of this patch. --- clang/lib/CodeGen/CGDebugInfo.cpp | 9 -------- .../DebugInfo/CXX/simple-template-names.cpp | 22 ++++++++++++++++--- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 8299d45ece76f..1489b5116e6ce 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -5869,15 +5869,6 @@ struct ReconstitutableType : public RecursiveASTVisitor { Reconstitutable = false; return false; } - bool VisitType(Type *T) { - // _BitInt(N) isn't reconstitutable because the bit width isn't encoded in - // the DWARF, only the byte width. - if (T->isBitIntType()) { - Reconstitutable = false; - return false; - } - return true; - } bool TraverseEnumType(EnumType *ET, bool = false) { // Unnamed enums can't be reconstituted due to a lack of column info we // produce in the DWARF, so we can't get Clang's full name back. diff --git a/clang/test/DebugInfo/CXX/simple-template-names.cpp b/clang/test/DebugInfo/CXX/simple-template-names.cpp index 5a5d706e81972..3c8ff2780b66a 100644 --- a/clang/test/DebugInfo/CXX/simple-template-names.cpp +++ b/clang/test/DebugInfo/CXX/simple-template-names.cpp @@ -114,12 +114,28 @@ void f() { f3(); // CHECK: !DISubprogram(name: "_STN|f3|", - + f1<_BitInt(3)>(); - // CHECK: !DISubprogram(name: "f1<_BitInt(3)>", + // CHECK: !DISubprogram(name: "_STN|f1|<_BitInt(3)>", f1(); - // CHECK: !DISubprogram(name: "f1", + // CHECK: !DISubprogram(name: "_STN|f1|", + + f1<_BitInt(120)>(); + // CHECK: !DISubprogram(name: "_STN|f1|<_BitInt(120)>", + + f1(); + // CHECK: !DISubprogram(name: "_STN|f1|", + + f2<_BitInt(2), 1>(); + // CHECK: !DISubprogram(name: "_STN|f2|<_BitInt(2), (_BitInt(2))1>", + + f2<_BitInt(64), 12>(); + // CHECK: !DISubprogram(name: "_STN|f2|<_BitInt(64), (_BitInt(64))12>", + + // FIXME: make block forms reconstitutable + f2<_BitInt(65), 1>(); +// CHECK: !DISubprogram(name: "f2<_BitInt(65), (_BitInt(65))1>", // Add a parameter just so this differs from other attributed function types // that don't mangle differently. From 88305251fe809ba384ea4ff4893bf671757504fb Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Wed, 19 Nov 2025 15:50:36 -0800 Subject: [PATCH 46/48] [ConstantFolding] Add constant folding for scalable vector interleave intrinsics. (#168668) We can constant fold interleave of identical splat vectors to a larger splat vector. --- llvm/lib/Analysis/ConstantFolding.cpp | 16 +++ .../InstSimplify/ConstProp/vector-calls.ll | 122 ++++++++++++++++++ 2 files changed, 138 insertions(+) diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp index 4bece85d3cfbf..916154b465af4 100644 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -4313,6 +4313,22 @@ static Constant *ConstantFoldScalableVectorCall( return ConstantVector::getNullValue(SVTy); break; } + case Intrinsic::vector_interleave2: + case Intrinsic::vector_interleave3: + case Intrinsic::vector_interleave4: + case Intrinsic::vector_interleave5: + case Intrinsic::vector_interleave6: + case Intrinsic::vector_interleave7: + case Intrinsic::vector_interleave8: { + Constant *SplatVal = Operands[0]->getSplatValue(); + if (!SplatVal) + return nullptr; + + if (!llvm::all_equal(Operands)) + return nullptr; + + return ConstantVector::getSplat(SVTy->getElementCount(), SplatVal); + } default: break; } diff --git a/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll b/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll index 5d9ed867c5e68..3f3cf341357d1 100644 --- a/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll +++ b/llvm/test/Transforms/InstSimplify/ConstProp/vector-calls.ll @@ -51,6 +51,32 @@ define <8 x i32> @fold_vector_interleave2() { ret <8 x i32> %1 } +define @fold_scalable_vector_interleave2() { +; CHECK-LABEL: define @fold_scalable_vector_interleave2() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave2.nxv8i32( zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave2_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave2_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave2.nxv8i32( splat (i32 1), splat (i32 1)) + ret %1 +} + +; Negative test. +define @fold_scalable_vector_interleave2_mismatch_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave2_mismatch_splat() { +; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.vector.interleave2.nxv8i32( splat (i32 1), splat (i32 2)) +; CHECK-NEXT: ret [[TMP1]] +; + %1 = call @llvm.vector.interleave2.nxv8i32( splat (i32 1), splat (i32 2)) + ret %1 +} + define <12 x i32> @fold_vector_interleave3() { ; CHECK-LABEL: define <12 x i32> @fold_vector_interleave3() { ; CHECK-NEXT: ret <12 x i32> @@ -59,6 +85,22 @@ define <12 x i32> @fold_vector_interleave3() { ret <12 x i32> %1 } +define @fold_scalable_vector_interleave3() { +; CHECK-LABEL: define @fold_scalable_vector_interleave3() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave3.nxv8i32( zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave3_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave3_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave3.nxv8i32( splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + define <16 x i32> @fold_vector_interleave4() { ; CHECK-LABEL: define <16 x i32> @fold_vector_interleave4() { ; CHECK-NEXT: ret <16 x i32> @@ -67,6 +109,22 @@ define <16 x i32> @fold_vector_interleave4() { ret <16 x i32> %1 } +define @fold_scalable_vector_interleave4() { +; CHECK-LABEL: define @fold_scalable_vector_interleave4() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave4.nxv16i32( zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave4_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave4_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave4.nxv16i32( splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + define <20 x i32> @fold_vector_interleave5() { ; CHECK-LABEL: define <20 x i32> @fold_vector_interleave5() { ; CHECK-NEXT: ret <20 x i32> @@ -75,6 +133,22 @@ define <20 x i32> @fold_vector_interleave5() { ret <20 x i32> %1 } +define @fold_scalable_vector_interleave5() { +; CHECK-LABEL: define @fold_scalable_vector_interleave5() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave5.nxv20i32( zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave5_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave5_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave5.nxv20i32( splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + define <24 x i32> @fold_vector_interleave6() { ; CHECK-LABEL: define <24 x i32> @fold_vector_interleave6() { ; CHECK-NEXT: ret <24 x i32> @@ -83,6 +157,22 @@ define <24 x i32> @fold_vector_interleave6() { ret <24 x i32> %1 } +define @fold_scalable_vector_interleave6() { +; CHECK-LABEL: define @fold_scalable_vector_interleave6() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave6.nxv24i32( zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave6_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave6_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave6.nxv24i32( splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + define <28 x i32> @fold_vector_interleave7() { ; CHECK-LABEL: define <28 x i32> @fold_vector_interleave7() { ; CHECK-NEXT: ret <28 x i32> @@ -91,6 +181,22 @@ define <28 x i32> @fold_vector_interleave7() { ret <28 x i32> %1 } +define @fold_scalable_vector_interleave7() { +; CHECK-LABEL: define @fold_scalable_vector_interleave7() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave7.nxv28i32( zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave7_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave7_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave7.nxv28i32( splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + define <32 x i32> @fold_vector_interleave8() { ; CHECK-LABEL: define <32 x i32> @fold_vector_interleave8() { ; CHECK-NEXT: ret <32 x i32> @@ -99,6 +205,22 @@ define <32 x i32> @fold_vector_interleave8() { ret <32 x i32> %1 } +define @fold_scalable_vector_interleave8() { +; CHECK-LABEL: define @fold_scalable_vector_interleave8() { +; CHECK-NEXT: ret zeroinitializer +; + %1 = call @llvm.vector.interleave8.nxv32i32( zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer, zeroinitializer) + ret %1 +} + +define @fold_scalable_vector_interleave8_splat() { +; CHECK-LABEL: define @fold_scalable_vector_interleave8_splat() { +; CHECK-NEXT: ret splat (i32 1) +; + %1 = call @llvm.vector.interleave8.nxv32i32( splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1), splat (i32 1)) + ret %1 +} + define { <4 x i32>, <4 x i32> } @fold_vector_deinterleave2() { ; CHECK-LABEL: define { <4 x i32>, <4 x i32> } @fold_vector_deinterleave2() { ; CHECK-NEXT: ret { <4 x i32>, <4 x i32> } { <4 x i32> , <4 x i32> } From 2aa2290af51a033849878b30ee30aae5d11394f3 Mon Sep 17 00:00:00 2001 From: mitchell Date: Thu, 20 Nov 2025 07:52:39 +0800 Subject: [PATCH 47/48] [clang-tidy] Add `IgnoredFilesList` option to `readability-duplicate-include` (#168196) Closes [#166938](https://github.com/llvm/llvm-project/issues/166938) --- .../readability/DuplicateIncludeCheck.cpp | 44 ++++++++++++++++--- .../readability/DuplicateIncludeCheck.h | 9 +++- clang-tools-extra/docs/ReleaseNotes.rst | 5 +++ .../checks/readability/duplicate-include.rst | 9 ++++ .../Inputs/duplicate-include/pack_begin.h | 1 + .../Inputs/duplicate-include/pack_end.h | 1 + .../duplicate-include-ignored-files.cpp | 24 ++++++++++ 7 files changed, 84 insertions(+), 9 deletions(-) create mode 100644 clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_begin.h create mode 100644 clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_end.h create mode 100644 clang-tools-extra/test/clang-tidy/checkers/readability/duplicate-include-ignored-files.cpp diff --git a/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.cpp b/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.cpp index cc9ae471a926d..4842fe22a8890 100644 --- a/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.cpp @@ -7,10 +7,12 @@ //===----------------------------------------------------------------------===// #include "DuplicateIncludeCheck.h" +#include "../utils/OptionsUtils.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Lex/Preprocessor.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/Support/Regex.h" #include namespace clang::tidy::readability { @@ -33,11 +35,8 @@ using FileList = SmallVector; class DuplicateIncludeCallbacks : public PPCallbacks { public: DuplicateIncludeCallbacks(DuplicateIncludeCheck &Check, - const SourceManager &SM) - : Check(Check), SM(SM) { - // The main file doesn't participate in the FileChanged notification. - Files.emplace_back(); - } + const SourceManager &SM, + llvm::ArrayRef IgnoredList); void FileChanged(SourceLocation Loc, FileChangeReason Reason, SrcMgr::CharacteristicKind FileType, @@ -62,10 +61,31 @@ class DuplicateIncludeCallbacks : public PPCallbacks { SmallVector Files; DuplicateIncludeCheck &Check; const SourceManager &SM; + SmallVector AllowedRegexes; }; } // namespace +DuplicateIncludeCheck::DuplicateIncludeCheck(StringRef Name, + ClangTidyContext *Context) + : ClangTidyCheck(Name, Context), + IgnoredFilesList(utils::options::parseStringList( + Options.get("IgnoredFilesList", ""))) {} + +DuplicateIncludeCallbacks::DuplicateIncludeCallbacks( + DuplicateIncludeCheck &Check, const SourceManager &SM, + llvm::ArrayRef IgnoredList) + : Check(Check), SM(SM) { + // The main file doesn't participate in the FileChanged notification. + Files.emplace_back(); + + AllowedRegexes.reserve(IgnoredList.size()); + for (const StringRef &It : IgnoredList) { + if (!It.empty()) + AllowedRegexes.emplace_back(It); + } +} + void DuplicateIncludeCallbacks::FileChanged(SourceLocation Loc, FileChangeReason Reason, SrcMgr::CharacteristicKind FileType, @@ -78,7 +98,7 @@ void DuplicateIncludeCallbacks::FileChanged(SourceLocation Loc, void DuplicateIncludeCallbacks::InclusionDirective( SourceLocation HashLoc, const Token &IncludeTok, StringRef FileName, - bool IsAngled, CharSourceRange FilenameRange, OptionalFileEntryRef File, + bool IsAngled, CharSourceRange FilenameRange, OptionalFileEntryRef /*File*/, StringRef SearchPath, StringRef RelativePath, const Module *SuggestedModule, bool ModuleImported, SrcMgr::CharacteristicKind FileType) { // Skip includes behind macros @@ -86,6 +106,10 @@ void DuplicateIncludeCallbacks::InclusionDirective( FilenameRange.getEnd().isMacroID()) return; if (llvm::is_contained(Files.back(), FileName)) { + if (llvm::any_of(AllowedRegexes, [&FileName](const llvm::Regex &R) { + return R.match(FileName); + })) + return; // We want to delete the entire line, so make sure that [Start,End] covers // everything. const SourceLocation Start = @@ -111,7 +135,13 @@ void DuplicateIncludeCallbacks::MacroUndefined(const Token &MacroNameTok, void DuplicateIncludeCheck::registerPPCallbacks( const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) { - PP->addPPCallbacks(std::make_unique(*this, SM)); + PP->addPPCallbacks( + std::make_unique(*this, SM, IgnoredFilesList)); +} + +void DuplicateIncludeCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { + Options.store(Opts, "IgnoredFilesList", + utils::options::serializeStringList(IgnoredFilesList)); } } // namespace clang::tidy::readability diff --git a/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.h b/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.h index ca3679108e60b..1ee5b1c209ff7 100644 --- a/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.h +++ b/clang-tools-extra/clang-tidy/readability/DuplicateIncludeCheck.h @@ -19,11 +19,16 @@ namespace clang::tidy::readability { /// directives between them are analyzed. class DuplicateIncludeCheck : public ClangTidyCheck { public: - DuplicateIncludeCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context) {} + DuplicateIncludeCheck(StringRef Name, ClangTidyContext *Context); void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) override; + void storeOptions(ClangTidyOptions::OptionMap &Opts) override; + +private: + // Semicolon-separated list of regexes or file names to ignore from duplicate + // warnings. + const std::vector IgnoredFilesList; }; } // namespace clang::tidy::readability diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index dc8abd88899a4..a6f80e3721db1 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -527,6 +527,11 @@ Changes in existing checks ignoring default constructors with user provided arguments and adding detection in container's method except ``empty``. +- Improved :doc:`readability-duplicate-include + ` check by adding + the ``IgnoredFilesList`` option (semicolon-separated list of regexes or + filenames) to allow intentional duplicates. + - Improved :doc:`readability-identifier-naming ` check by ignoring declarations and macros in system headers. The documentation is also improved diff --git a/clang-tools-extra/docs/clang-tidy/checks/readability/duplicate-include.rst b/clang-tools-extra/docs/clang-tidy/checks/readability/duplicate-include.rst index 45df7e1b84f3f..28a4991a922f8 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/readability/duplicate-include.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/readability/duplicate-include.rst @@ -33,3 +33,12 @@ Because of the intervening macro definitions, this code remains unchanged: #define NDEBUG #include "assertion.h" // ...code with assertions disabled + +Options +------- + +.. option:: IgnoredFilesList + + A semicolon-separated list of regular expressions or filenames that are + allowed to be included multiple times without diagnostics. Matching is + performed against the textual include name. Default is an empty string. diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_begin.h b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_begin.h new file mode 100644 index 0000000000000..fc9369c0cfb8f --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_begin.h @@ -0,0 +1 @@ +// Intentionally unguarded begin-pack header used in tests diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_end.h b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_end.h new file mode 100644 index 0000000000000..78fd0a9adf475 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/duplicate-include/pack_end.h @@ -0,0 +1 @@ +// Intentionally unguarded end-pack header used in tests diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/duplicate-include-ignored-files.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/duplicate-include-ignored-files.cpp new file mode 100644 index 0000000000000..cdc2f44432d76 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/duplicate-include-ignored-files.cpp @@ -0,0 +1,24 @@ +// RUN: %check_clang_tidy %s readability-duplicate-include %t -- \ +// RUN: -config="{CheckOptions: {readability-duplicate-include.IgnoredFilesList: 'pack_.*\\.h'}}" \ +// RUN: -header-filter='' -- -I %S/Inputs/duplicate-include + +int g; +#include "duplicate-include.h" +int h; +#include "duplicate-include.h" +int i; +// CHECK-MESSAGES: :[[@LINE-2]]:1: warning: duplicate include [readability-duplicate-include] +// CHECK-FIXES: int g; +// CHECK-FIXES-NEXT: #include "duplicate-include.h" +// CHECK-FIXES-NEXT: int h; +// CHECK-FIXES-NEXT: int i; + +#include "pack_begin.h" +struct A { int x; }; +#include "pack_end.h" + +#include "pack_begin.h" +struct B { int x; }; +#include "pack_end.h" + +// No warning here. From 1278d47e9f9773972ff17deaf4d69db48dccdad8 Mon Sep 17 00:00:00 2001 From: Jasmine Tang Date: Wed, 19 Nov 2025 15:52:51 -0800 Subject: [PATCH 48/48] [CIR] Upstream isfpclass op (#166037) Ref commit in incubator: ee17ff67f3e567585db991cdad1159520c516bb4 There is a minor change in the assumption for emitting a direct callee. In incubator, `bool hasAttributeNoBuiltin = false` (`llvm-project/clang/lib/CIR/CodeGen/CIRGenExpr.cpp:1671`), while in upstream, it's true, therefore, the call to finite(...) is not converted to a builtin anymore. Fixes #163892 --- clang/include/clang/CIR/Dialect/IR/CIROps.td | 66 +++++++ clang/include/clang/CIR/MissingFeatures.h | 1 + clang/lib/CIR/CodeGen/CIRGenBuilder.h | 5 + clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp | 92 +++++++++ .../CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 12 ++ clang/test/CIR/CodeGen/builtin-isfpclass.c | 174 ++++++++++++++++++ 6 files changed, 350 insertions(+) create mode 100644 clang/test/CIR/CodeGen/builtin-isfpclass.c diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td index 92300ef5b152c..79a1b292df462 100644 --- a/clang/include/clang/CIR/Dialect/IR/CIROps.td +++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td @@ -4112,6 +4112,72 @@ def CIR_RotateOp : CIR_Op<"rotate", [Pure, SameOperandsAndResultType]> { let hasFolder = 1; } +//===----------------------------------------------------------------------===// +// FPClass Test Flags +//===----------------------------------------------------------------------===// + +def FPClassTestEnum : CIR_I32EnumAttr<"FPClassTest", "floating-point class test flags", [ + // Basic flags + I32EnumAttrCase<"SignalingNaN", 1, "fcSNan">, + I32EnumAttrCase<"QuietNaN", 2, "fcQNan">, + I32EnumAttrCase<"NegativeInfinity", 4, "fcNegInf">, + I32EnumAttrCase<"NegativeNormal", 8, "fcNegNormal">, + I32EnumAttrCase<"NegativeSubnormal", 16, "fcNegSubnormal">, + I32EnumAttrCase<"NegativeZero", 32, "fcNegZero">, + I32EnumAttrCase<"PositiveZero", 64, "fcPosZero">, + I32EnumAttrCase<"PositiveSubnormal", 128, "fcPosSubnormal">, + I32EnumAttrCase<"PositiveNormal", 256, "fcPosNormal">, + I32EnumAttrCase<"PositiveInfinity", 512, "fcPosInf">, + + // Composite flags + I32EnumAttrCase<"Nan", 3, "fcNan">, // fcSNan | fcQNan + I32EnumAttrCase<"Infinity", 516, "fcInf">, // fcPosInf | fcNegInf + I32EnumAttrCase<"Normal", 264, "fcNormal">, // fcPosNormal | fcNegNormal + I32EnumAttrCase<"Subnormal", 144, "fcSubnormal">, // fcPosSubnormal | fcNegSubnormal + I32EnumAttrCase<"Zero", 96, "fcZero">, // fcPosZero | fcNegZero + I32EnumAttrCase<"PositiveFinite", 448, "fcPosFinite">,// fcPosNormal | fcPosSubnormal | fcPosZero + I32EnumAttrCase<"NegativeFinite", 56, "fcNegFinite">, // fcNegNormal | fcNegSubnormal | fcNegZero + I32EnumAttrCase<"Finite", 504, "fcFinite">, // fcPosFinite | fcNegFinite + I32EnumAttrCase<"Positive", 960, "fcPositive">, // fcPosFinite | fcPosInf + I32EnumAttrCase<"Negative", 60, "fcNegative">, // fcNegFinite | fcNegInf + I32EnumAttrCase<"All", 1023, "fcAllFlags">, // fcNan | fcInf | fcFinite +]> { + let cppNamespace = "::cir"; +} + +def CIR_IsFPClassOp : CIR_Op<"is_fp_class"> { + let summary = "Corresponding to the `__builtin_fpclassify` builtin function in clang"; + + let description = [{ + The `cir.is_fp_class` operation takes a floating-point value as its first + argument and a bitfield of flags as its second argument. The operation + returns a boolean value indicating whether the floating-point value + satisfies the given flags. + + The flags must be a compile time constant and the values are: + + | Bit # | floating-point class | + | ----- | -------------------- | + | 0 | Signaling NaN | + | 1 | Quiet NaN | + | 2 | Negative infinity | + | 3 | Negative normal | + | 4 | Negative subnormal | + | 5 | Negative zero | + | 6 | Positive zero | + | 7 | Positive subnormal | + | 8 | Positive normal | + | 9 | Positive infinity | + }]; + + let arguments = (ins CIR_AnyFloatType:$src, + FPClassTestEnum:$flags); + let results = (outs CIR_BoolType:$result); + let assemblyFormat = [{ + $src `,` $flags `:` functional-type($src, $result) attr-dict + }]; +} + //===----------------------------------------------------------------------===// // Assume Operations //===----------------------------------------------------------------------===// diff --git a/clang/include/clang/CIR/MissingFeatures.h b/clang/include/clang/CIR/MissingFeatures.h index 6b5c34d28ce2a..2ecde9aa5d56d 100644 --- a/clang/include/clang/CIR/MissingFeatures.h +++ b/clang/include/clang/CIR/MissingFeatures.h @@ -266,6 +266,7 @@ struct MissingFeatures { static bool emitTypeCheck() { return false; } static bool emitTypeMetadataCodeForVCall() { return false; } static bool fastMathFlags() { return false; } + static bool fpConstraints() { return false; } static bool generateDebugInfo() { return false; } static bool globalViewIndices() { return false; } diff --git a/clang/lib/CIR/CodeGen/CIRGenBuilder.h b/clang/lib/CIR/CodeGen/CIRGenBuilder.h index 653ce00b29d36..85b38120169fd 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuilder.h +++ b/clang/lib/CIR/CodeGen/CIRGenBuilder.h @@ -344,6 +344,11 @@ class CIRGenBuilderTy : public cir::CIRBaseBuilderTy { llvm_unreachable("negation for the given type is NYI"); } + cir::IsFPClassOp createIsFPClass(mlir::Location loc, mlir::Value src, + cir::FPClassTest flags) { + return cir::IsFPClassOp::create(*this, loc, src, flags); + } + // TODO: split this to createFPExt/createFPTrunc when we have dedicated cast // operations. mlir::Value createFloatingCast(mlir::Value v, mlir::Type destType) { diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp index 77f19343653db..dee5704c66011 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp @@ -520,6 +520,98 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID, cir::PrefetchOp::create(builder, loc, address, locality, isWrite); return RValue::get(nullptr); } + // From https://clang.llvm.org/docs/LanguageExtensions.html#builtin-isfpclass + // : + // + // The `__builtin_isfpclass()` builtin is a generalization of functions + // isnan, isinf, isfinite and some others defined by the C standard. It tests + // if the floating-point value, specified by the first argument, falls into + // any of data classes, specified by the second argument. + case Builtin::BI__builtin_isnan: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + assert(!cir::MissingFeatures::fpConstraints()); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Nan), + convertType(e->getType()))); + } + + case Builtin::BI__builtin_issignaling: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::SignalingNaN), + convertType(e->getType()))); + } + + case Builtin::BI__builtin_isinf: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + assert(!cir::MissingFeatures::fpConstraints()); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Infinity), + convertType(e->getType()))); + } + + case Builtin::BIfinite: + case Builtin::BI__finite: + case Builtin::BIfinitef: + case Builtin::BI__finitef: + case Builtin::BIfinitel: + case Builtin::BI__finitel: + case Builtin::BI__builtin_isfinite: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + assert(!cir::MissingFeatures::fpConstraints()); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Finite), + convertType(e->getType()))); + } + + case Builtin::BI__builtin_isnormal: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Normal), + convertType(e->getType()))); + } + + case Builtin::BI__builtin_issubnormal: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Subnormal), + convertType(e->getType()))); + } + + case Builtin::BI__builtin_iszero: { + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + mlir::Location loc = getLoc(e->getBeginLoc()); + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest::Zero), + convertType(e->getType()))); + } + case Builtin::BI__builtin_isfpclass: { + Expr::EvalResult result; + if (!e->getArg(1)->EvaluateAsInt(result, cgm.getASTContext())) + break; + + assert(!cir::MissingFeatures::cgFPOptionsRAII()); + mlir::Value v = emitScalarExpr(e->getArg(0)); + uint64_t test = result.Val.getInt().getLimitedValue(); + mlir::Location loc = getLoc(e->getBeginLoc()); + // + return RValue::get(builder.createBoolToInt( + builder.createIsFPClass(loc, v, cir::FPClassTest(test)), + convertType(e->getType()))); + } } // If this is an alias for a lib function (e.g. __builtin_sin), emit diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index d45a2975c4afc..833464824f0e5 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -676,6 +676,18 @@ mlir::LogicalResult CIRToLLVMASinOpLowering::matchAndRewrite( return mlir::success(); } +mlir::LogicalResult CIRToLLVMIsFPClassOpLowering::matchAndRewrite( + cir::IsFPClassOp op, OpAdaptor adaptor, + mlir::ConversionPatternRewriter &rewriter) const { + mlir::Value src = adaptor.getSrc(); + cir::FPClassTest flags = adaptor.getFlags(); + mlir::IntegerType retTy = rewriter.getI1Type(); + + rewriter.replaceOpWithNewOp( + op, retTy, src, static_cast(flags)); + return mlir::success(); +} + mlir::LogicalResult CIRToLLVMAssumeOpLowering::matchAndRewrite( cir::AssumeOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const { diff --git a/clang/test/CIR/CodeGen/builtin-isfpclass.c b/clang/test/CIR/CodeGen/builtin-isfpclass.c new file mode 100644 index 0000000000000..16d82c905f445 --- /dev/null +++ b/clang/test/CIR/CodeGen/builtin-isfpclass.c @@ -0,0 +1,174 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o %t.cir +// RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t.cir +// RUN: FileCheck --input-file=%t.cir %s -check-prefix=LLVM +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.cir +// RUN: FileCheck --input-file=%t.cir %s -check-prefix=OGCG +int finite(double); + +// CHECK: cir.func {{.*}}@test_is_finite +void test_is_finite(__fp16 *H, float F, double D, long double LD) { + volatile int res; + res = __builtin_isinf(*H); + // CIR: cir.is_fp_class %{{.*}}, fcInf : (!cir.f16) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 516) + // OGCG: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 516) + + res = __builtin_isinf(F); + // CIR: cir.is_fp_class %{{.*}}, fcInf : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 516) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 516) + + res = __builtin_isinf(D); + // CIR: cir.is_fp_class %{{.*}}, fcInf : (!cir.double) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f64(double {{.*}}, i32 516) + // OGCG: call i1 @llvm.is.fpclass.f64(double {{.*}}, i32 516) + + res = __builtin_isinf(LD); + // CIR: cir.is_fp_class %{{.*}}, fcInf : (!cir.long_double) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f80(x86_fp80 {{.*}}, i32 516) + // OGCG: call i1 @llvm.is.fpclass.f80(x86_fp80 {{.*}}, i32 516) + + res = __builtin_isfinite(*H); + // CIR: cir.is_fp_class %{{.*}}, fcFinite : (!cir.f16) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 504) + // OGCG: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 504) + + res = __builtin_isfinite(F); + // CIR: cir.is_fp_class %{{.*}}, fcFinite : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 504) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 504) + + res = finite(D); + // CIR: cir.call @finite(%{{.*}}) nothrow side_effect(const) : (!cir.double) -> !s32i + // LLVM: call i32 @finite(double {{.*}}) + // OGCG: call i1 @llvm.is.fpclass.f64(double %20, i32 504) + res = __builtin_isnormal(*H); + // CIR: cir.is_fp_class %{{.*}}, fcNormal : (!cir.f16) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 264) + // OGCG: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 264) + + res = __builtin_isnormal(F); + // CIR: cir.is_fp_class %{{.*}}, fcNormal : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 264) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 264) + + res = __builtin_issubnormal(F); + // CIR: cir.is_fp_class %{{.*}}, fcSubnormal : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 144) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 144) + res = __builtin_iszero(F); + // CIR: cir.is_fp_class %{{.*}}, fcZero : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 96) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 96) + res = __builtin_issignaling(F); + // CIR: cir.is_fp_class %{{.*}}, fcSNan : (!cir.float) -> !cir.bool + // LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 1) + // OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 1) +} + +_Bool check_isfpclass_finite(float x) { + return __builtin_isfpclass(x, 504 /*Finite*/); +} + +// CIR: cir.func {{.*}}@check_isfpclass_finite +// CIR: cir.is_fp_class %{{.*}}, fcFinite : (!cir.float) +// LLVM: @check_isfpclass_finite +// LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 504) +// OGCG: @check_isfpclass_finite +// OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 504) + +_Bool check_isfpclass_nan_f32(float x) { + return __builtin_isfpclass(x, 3 /*NaN*/); +} + +// CIR: cir.func {{.*}}@check_isfpclass_nan_f32 +// CIR: cir.is_fp_class %{{.*}}, fcNan : (!cir.float) +// LLVM: @check_isfpclass_nan_f32 +// LLVM: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 3) +// OGCG: @check_isfpclass_nan_f32 +// OGCG: call i1 @llvm.is.fpclass.f32(float {{.*}}, i32 3) + + +_Bool check_isfpclass_snan_f64(double x) { + return __builtin_isfpclass(x, 1 /*SNaN*/); +} + +// CIR: cir.func {{.*}}@check_isfpclass_snan_f64 +// CIR: cir.is_fp_class %{{.*}}, fcSNan : (!cir.double) +// LLVM: @check_isfpclass_snan_f64 +// LLVM: call i1 @llvm.is.fpclass.f64(double {{.*}}, i32 1) +// OGCG: @check_isfpclass_snan_f64 +// OGCG: call i1 @llvm.is.fpclass.f64(double {{.*}}, i32 1) + + +_Bool check_isfpclass_zero_f16(_Float16 x) { + return __builtin_isfpclass(x, 96 /*Zero*/); +} + +// CIR: cir.func {{.*}}@check_isfpclass_zero_f16 +// CIR: cir.is_fp_class %{{.*}}, fcZero : (!cir.f16) +// LLVM: @check_isfpclass_zero_f16 +// LLVM: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 96) +// OGCG: @check_isfpclass_zero_f16 +// OGCG: call i1 @llvm.is.fpclass.f16(half {{.*}}, i32 96) + +// Update when we support FP pragma in functions and can convert BoolType in prvalue to i1. + +// _Bool check_isfpclass_finite_strict(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfpclass(x, 504 /*Finite*/); +// } +// +// _Bool check_isfpclass_nan_f32_strict(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfpclass(x, 3 /*NaN*/); +// } +// +// _Bool check_isfpclass_snan_f64_strict(double x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfpclass(x, 1 /*NaN*/); +// } +// +// _Bool check_isfpclass_zero_f16_strict(_Float16 x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfpclass(x, 96 /*Zero*/); +// } +// +// _Bool check_isnan(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isnan(x); +// } +// +// _Bool check_isinf(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isinf(x); +// } +// +// _Bool check_isfinite(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfinite(x); +// } +// +// _Bool check_isnormal(float x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isnormal(x); +// } +// +// typedef float __attribute__((ext_vector_type(4))) float4; +// typedef double __attribute__((ext_vector_type(4))) double4; +// typedef int __attribute__((ext_vector_type(4))) int4; +// typedef long __attribute__((ext_vector_type(4))) long4; +// +// int4 check_isfpclass_nan_v4f32(float4 x) { +// return __builtin_isfpclass(x, 3 /*NaN*/); +// } +// +// int4 check_isfpclass_nan_strict_v4f32(float4 x) { +// #pragma STDC FENV_ACCESS ON +// return __builtin_isfpclass(x, 3 /*NaN*/); +// } +// +// long4 check_isfpclass_nan_v4f64(double4 x) { +// return __builtin_isfpclass(x, 3 /*NaN*/); +// }