Changeset 4b4f95f


Ignore:
Timestamp:
Apr 29, 2022, 9:39:24 PM (2 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, ast-experimental, master, pthread-emulation, qualifiedEnum
Children:
24ceace
Parents:
433905a (diff), 0c939dd (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Files:
9 added
1 deleted
12 edited
1 moved

Legend:

Unmodified
Added
Removed
  • benchmark/Cargo.toml.in

    r433905a r4b4f95f  
    44authors = ["Cforall"]
    55edition = "2018"
     6
     7[[bin]]
     8name = "rdq-churn-tokio"
     9path = "@abs_srcdir@/readyQ/churn.rs"
    610
    711[[bin]]
  • benchmark/Makefile.am

    r433905a r4b4f95f  
    614614RDQBENCHES = \
    615615        rdq-churn-cfa \
     616        rdq-churn-tokio \
     617        rdq-churn-go \
     618        rdq-churn-fibre \
    616619        rdq-cycle-cfa \
    617620        rdq-cycle-tokio \
  • benchmark/readyQ/churn.cfa

    r433905a r4b4f95f  
    11#include "rq_bench.hfa"
    22
     3#include <locks.hfa>
     4
    35unsigned spot_cnt = 2;
    4 bench_sem * volatile * spots;
     6semaphore * spots;
    57
    68thread BThrd {
    79        unsigned long long count;
    810        unsigned long long blocks;
    9         bench_sem sem;
     11        bool skip;
    1012};
    1113
     
    1416        this.count  = 0;
    1517        this.blocks = 0;
     18        this.skip = false;
    1619}
    1720
     
    1922
    2023void main( BThrd & this ) with( this ) {
    21         wait( sem );
     24        park();
    2225        for() {
    23                 uint32_t r = prng();
    24                 bench_sem * next = __atomic_exchange_n(&spots[r % spot_cnt], &sem, __ATOMIC_SEQ_CST);
    25                 if(next) post( *next );
    26                 blocks += wait( sem );
     26                uint32_t r = prng(this);
     27                semaphore & sem = spots[r % spot_cnt];
     28                if(!skip) V( sem );
     29                blocks += P( sem );
     30                skip = false;
     31
    2732                count ++;
    2833                if( clock_mode && stop) break;
     
    4954                        spots = aalloc(spot_cnt);
    5055                        for(i; spot_cnt) {
    51                                 spots[i] = 0p;
     56                                (spots[i]){ 0 };
    5257                        }
    5358
     
    5560                        BThrd * threads[nthreads];
    5661                        for(i; nthreads ) {
    57                                 threads[i] = malloc();
    58                                 (*threads[i]){};
     62                                BThrd & t = *(threads[i] = malloc());
     63                                (t){};
     64                                t.skip = i < spot_cnt;
    5965                        }
    6066                        printf("Starting\n");
     
    6470
    6571                        for(i; nthreads) {
    66                                 post( threads[i]->sem );
     72                                unpark( *threads[i] );
    6773                        }
    6874                        wait(start, is_tty);
     
    7278                        printf("\nDone\n");
    7379
     80                        for(i; spot_cnt) {
     81                                for(10000) V( spots[i] );
     82                        }
     83
    7484                        for(i; nthreads) {
    75                                 post( threads[i]->sem );
    7685                                BThrd & thrd = join( *threads[i] );
    7786                                global_counter += thrd.count;
  • src/AST/Convert.cpp

    r433905a r4b4f95f  
    27292729                        ty->forall.emplace_back(new ast::TypeInstType(param));
    27302730                        for (auto asst : param->assertions) {
    2731                                 ty->assertions.emplace_back(new ast::VariableExpr({}, asst));
     2731                                ty->assertions.emplace_back(
     2732                                        new ast::VariableExpr(param->location, asst));
    27322733                        }
    27332734                }
  • src/Common/utility.h

    r433905a r4b4f95f  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Feb 11 13:00:36 2020
    13 // Update Count     : 50
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Mon Apr 25 14:26:00 2022
     13// Update Count     : 51
    1414//
    1515
     
    230230}
    231231
     232template<typename Container, typename Pred>
     233void erase_if( Container & cont, Pred && pred ) {
     234        auto keep_end = std::remove_if( cont.begin(), cont.end(), pred );
     235        cont.erase( keep_end, cont.end() );
     236}
     237
    232238template< typename... Args >
    233239auto zip(Args&&... args) -> decltype(zipWith(std::forward<Args>(args)..., std::make_pair)) {
  • src/SymTab/Validate.cc

    r433905a r4b4f95f  
    1010// Created On       : Sun May 17 21:50:04 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Fri Nov 12 11:00:00 2021
    13 // Update Count     : 364
     12// Last Modified On : Fri Apr 29  9:45:00 2022
     13// Update Count     : 365
    1414//
    1515
     
    143143        struct LinkReferenceToTypes_old final : public WithIndexer, public WithGuards, public WithVisitorRef<LinkReferenceToTypes_old>, public WithShortCircuiting {
    144144                LinkReferenceToTypes_old( const Indexer * indexer );
     145
    145146                void postvisit( TypeInstType * typeInst );
    146147
     
    370371        }
    371372
     373        void linkReferenceToTypes( std::list< Declaration * > & translationUnit ) {
     374                PassVisitor<LinkReferenceToTypes_old> lrt( nullptr );
     375                acceptAll( translationUnit, lrt ); // must happen before autogen, because sized flag needs to propagate to generated functions
     376        }
     377
    372378        void validate_B( std::list< Declaration * > & translationUnit ) {
    373                 PassVisitor<LinkReferenceToTypes_old> lrt( nullptr );
    374379                PassVisitor<FixQualifiedTypes> fixQual;
    375380                {
    376381                        Stats::Heap::newPass("validate-B");
    377382                        Stats::Time::BlockGuard guard("validate-B");
    378                         acceptAll( translationUnit, lrt ); // must happen before autogen, because sized flag needs to propagate to generated functions
     383                        //linkReferenceToTypes( translationUnit );
    379384                        mutateAll( translationUnit, fixQual ); // must happen after LinkReferenceToTypes_old, because aggregate members are accessed
    380385                        HoistStruct::hoistStruct( translationUnit );
  • src/SymTab/Validate.h

    r433905a r4b4f95f  
    4242        void validate_E( std::list< Declaration * > &translationUnit );
    4343        void validate_F( std::list< Declaration * > &translationUnit );
     44        void linkReferenceToTypes( std::list< Declaration * > &translationUnit );
    4445
    4546        const ast::Type * validateType(
  • src/Validate/ForallPointerDecay.cpp

    r433905a r4b4f95f  
    1010// Created On       : Tue Dec  7 16:15:00 2021
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Fri Feb 11 10:59:00 2022
    13 // Update Count     : 0
     12// Last Modified On : Sat Apr 23 13:10:00 2022
     13// Update Count     : 1
    1414//
    1515
     
    237237}
    238238
     239std::vector<ast::ptr<ast::DeclWithType>> expandAssertions(
     240                std::vector<ast::ptr<ast::DeclWithType>> const & old ) {
     241        return TraitExpander::expandAssertions( old );
     242}
     243
    239244} // namespace Validate
    240245
  • src/Validate/ForallPointerDecay.hpp

    r433905a r4b4f95f  
    1010// Created On       : Tue Dec  7 16:15:00 2021
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Tue Dec  8 11:50:00 2021
    13 // Update Count     : 0
     12// Last Modified On : Sat Apr 23 13:13:00 2022
     13// Update Count     : 1
    1414//
    1515
    1616#pragma once
    1717
     18#include <vector>
     19#include "AST/Node.hpp"
     20
    1821namespace ast {
     22        class DeclWithType;
    1923        class TranslationUnit;
    2024}
     
    2731void decayForallPointers( ast::TranslationUnit & transUnit );
    2832
     33/// Expand all traits in an assertion list.
     34std::vector<ast::ptr<ast::DeclWithType>> expandAssertions(
     35        std::vector<ast::ptr<ast::DeclWithType>> const & );
     36
    2937}
    3038
  • src/Validate/GenericParameter.cpp

    r433905a r4b4f95f  
    1010// Created On       : Fri Mar 21 10:02:00 2022
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Wed Apr 13 10:09:00 2022
    13 // Update Count     : 0
     12// Last Modified On : Fri Apr 22 16:43:00 2022
     13// Update Count     : 1
    1414//
    1515
     
    2222#include "AST/TranslationUnit.hpp"
    2323#include "AST/Type.hpp"
     24#include "Validate/NoIdSymbolTable.hpp"
    2425
    2526namespace Validate {
     
    138139// --------------------------------------------------------------------------
    139140
    140 // A SymbolTable that only has the operations used in the Translate Dimension
    141 // pass. More importantly, it doesn't have some methods that should no be
    142 // called by the Pass template (lookupId and addId).
    143 class NoIdSymbolTable {
    144         ast::SymbolTable base;
    145 public:
    146 #       define FORWARD_X( func, types_and_names, just_names ) \
    147         inline auto func types_and_names -> decltype( base.func just_names ) { \
    148                 return base.func just_names ; \
    149         }
    150 #       define FORWARD_0( func )         FORWARD_X( func, (),             () )
    151 #       define FORWARD_1( func, type )   FORWARD_X( func, (type arg),     (arg) )
    152 #       define FORWARD_2( func, t0, t1 ) FORWARD_X( func, (t0 a0, t1 a1), (a0, a1) )
    153 
    154         FORWARD_0( enterScope )
    155         FORWARD_0( leaveScope )
    156         FORWARD_1( lookupType, const std::string &        )
    157         FORWARD_1( addType   , const ast::NamedTypeDecl * )
    158         FORWARD_1( addStruct , const ast::StructDecl *    )
    159         FORWARD_1( addEnum   , const ast::EnumDecl *      )
    160         FORWARD_1( addUnion  , const ast::UnionDecl *     )
    161         FORWARD_1( addTrait  , const ast::TraitDecl *     )
    162         FORWARD_2( addWith   , const std::vector< ast::ptr<ast::Expr> > &, const ast::Decl * )
    163 };
    164 
    165 struct TranslateDimensionCore : public ast::WithGuards {
    166         NoIdSymbolTable symtab;
     141struct TranslateDimensionCore :
     142                public WithNoIdSymbolTable, public ast::WithGuards {
    167143
    168144        // SUIT: Struct- or Union- InstType
  • src/Validate/module.mk

    r433905a r4b4f95f  
    2020        Validate/CompoundLiteral.cpp \
    2121        Validate/CompoundLiteral.hpp \
     22        Validate/EliminateTypedef.cpp \
     23        Validate/EliminateTypedef.hpp \
     24        Validate/FixQualifiedTypes.cpp \
     25        Validate/FixQualifiedTypes.hpp \
    2226        Validate/ForallPointerDecay.cpp \
    2327        Validate/ForallPointerDecay.hpp \
     
    2630        Validate/HandleAttributes.cc \
    2731        Validate/HandleAttributes.h \
     32        Validate/HoistStruct.cpp \
     33        Validate/HoistStruct.hpp \
    2834        Validate/InitializerLength.cpp \
    2935        Validate/InitializerLength.hpp \
    3036        Validate/LabelAddressFixer.cpp \
    3137        Validate/LabelAddressFixer.hpp \
     38        Validate/NoIdSymbolTable.hpp \
    3239        Validate/ReturnCheck.cpp \
    3340        Validate/ReturnCheck.hpp \
  • src/main.cc

    r433905a r4b4f95f  
    1010// Created On       : Fri May 15 23:12:02 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Wed Apr 13 11:11:00 2022
    13 // Update Count     : 672
     12// Last Modified On : Fri Apr 29  9:52:00 2022
     13// Update Count     : 673
    1414//
    1515
     
    7575#include "Tuples/Tuples.h"                  // for expandMemberTuples, expan...
    7676#include "Validate/Autogen.hpp"             // for autogenerateRoutines
     77#include "Validate/CompoundLiteral.hpp"     // for handleCompoundLiterals
     78#include "Validate/EliminateTypedef.hpp"    // for eliminateTypedef
     79#include "Validate/FindSpecialDecls.h"      // for findGlobalDecls
     80#include "Validate/FixQualifiedTypes.hpp"   // for fixQualifiedTypes
     81#include "Validate/ForallPointerDecay.hpp"  // for decayForallPointers
    7782#include "Validate/GenericParameter.hpp"    // for fillGenericParameters, tr...
    78 #include "Validate/FindSpecialDecls.h"      // for findGlobalDecls
    79 #include "Validate/ForallPointerDecay.hpp"  // for decayForallPointers
    80 #include "Validate/CompoundLiteral.hpp"     // for handleCompoundLiterals
     83#include "Validate/HoistStruct.hpp"         // for hoistStruct
    8184#include "Validate/InitializerLength.hpp"   // for setLengthFromInitializer
    8285#include "Validate/LabelAddressFixer.hpp"   // for fixLabelAddresses
     
    328331                // add the assignment statement after the initialization of a type parameter
    329332                PASS( "Validate-A", SymTab::validate_A( translationUnit ) );
    330                 PASS( "Validate-B", SymTab::validate_B( translationUnit ) );
     333
     334                // Must happen before auto-gen, because it uses the sized flag.
     335                PASS( "Link Reference To Types", SymTab::linkReferenceToTypes( translationUnit ) );
    331336
    332337                CodeTools::fillLocations( translationUnit );
     
    342347
    343348                        forceFillCodeLocations( transUnit );
     349
     350                        // Must happen after Link References To Types,
     351                        // because aggregate members are accessed.
     352                        PASS( "Fix Qualified Types", Validate::fixQualifiedTypes( transUnit ) );
     353
     354                        PASS( "Hoist Struct", Validate::hoistStruct( transUnit ) );
     355                        PASS( "Eliminate Typedef", Validate::eliminateTypedef( transUnit ) );
    344356
    345357                        // Check as early as possible. Can't happen before
     
    438450                        translationUnit = convert( move( transUnit ) );
    439451                } else {
     452                        PASS( "Validate-B", SymTab::validate_B( translationUnit ) );
    440453                        PASS( "Validate-C", SymTab::validate_C( translationUnit ) );
    441454                        PASS( "Validate-D", SymTab::validate_D( translationUnit ) );
Note: See TracChangeset for help on using the changeset viewer.