|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +set -x |
| 4 | +set -u |
| 5 | + |
| 6 | +# This is a file which defines helper routines based off of libjenkins for |
| 7 | +# working with pipelines. You must source libjenkins before you call this. |
| 8 | + |
| 9 | +########### |
| 10 | +# Helpers # |
| 11 | +########### |
| 12 | + |
| 13 | +map_array() { |
| 14 | + local ARRAY=( $1 ) |
| 15 | + local PATTERN="$2" |
| 16 | + |
| 17 | + for p in ${ARRAY[@]}; do |
| 18 | + echo $p |
| 19 | + done | xargs -I elt printf "$PATTERN" elt |
| 20 | +} |
| 21 | + |
| 22 | +################# |
| 23 | +# Main Routines # |
| 24 | +################# |
| 25 | + |
| 26 | +PIPELINES=( "PreSpecialize" "HighLevel" "EarlyLoopOpt" "MidLevelOpt" "Lower" "LowLevel" "LateLoopOpt" ) |
| 27 | +build_bni_with_slice_pipelines_disabled() { |
| 28 | + local SCRIPT=$1 |
| 29 | + local OUTPUT_DIR=$2 |
| 30 | + local PIPELINE_LENGTH="${#PIPELINES[@]}" |
| 31 | + local SEQ_END_POINT=$(($PIPELINE_LENGTH-1)) |
| 32 | + |
| 33 | + for i in $(seq $SEQ_END_POINT); do |
| 34 | + PIPELINE_SLICE="${PIPELINES[@]:$i}" |
| 35 | + DATA_FILE=$(printf "$OUTPUT_DIR/pipeline-slice-%.2d-disabled-pipeline.json" $i) |
| 36 | + PIPELINE_SLICE_OPTIONS=$(map_array "${PIPELINE_SLICE[@]}" " --disable-passpipeline %s ") |
| 37 | + $SCRIPT $PIPELINE_SLICE_OPTIONS > $DATA_FILE |
| 38 | + local EXTRA_FLAGS="-DSWIFT_EXTRA_FLAGS='-Xfrontend;-external-pass-pipeline-filename;-Xfrontend;$DATA_FILE'" |
| 39 | + echo "Building Stdlib with Slice: ${PIPELINES[@]::$i}..." |
| 40 | + build_swift_stdlib SWIFT_USE_OPTIMIZED=1 SWIFT_USE_ASSERTIONS=1 SWIFT_EXTRA_CMAKE_FLAGS="$EXTRA_FLAGS" SWIFT_STDLIB_PLATFORMS=macosx-10.9-internal-x86_64 |
| 41 | + done |
| 42 | +} |
| 43 | + |
| 44 | +build_bni_with_individual_pipelines_disabled() { |
| 45 | + local SCRIPT=$1 |
| 46 | + local OUTPUT_DIR=$2 |
| 47 | + local PIPELINE_LENGTH="${#PIPELINES[@]}" |
| 48 | + local SEQ_END_POINT=$(($PIPELINE_LENGTH-1)) |
| 49 | + |
| 50 | + for pipeline in "${PIPELINES[@]}"; do |
| 51 | + DATA_FILE=$(printf "$OUTPUT_DIR/%s-disabled-pipeline.json" $pipeline) |
| 52 | + $SCRIPT --disable-passpipeline "$pipeline" > $DATA_FILE |
| 53 | + local EXTRA_FLAGS="-DSWIFT_EXTRA_FLAGS='-Xfrontend;-external-pass-pipeline-filename;-Xfrontend;$DATA_FILE'" |
| 54 | + echo "Building Stdlib with pass manager $pipeline disabled." |
| 55 | + build_swift_stdlib SWIFT_USE_OPTIMIZED=1 SWIFT_USE_ASSERTIONS=1 SWIFT_EXTRA_CMAKE_FLAGS="$EXTRA_FLAGS" SWIFT_STDLIB_PLATFORMS=macosx-10.9-internal-x86_64 |
| 56 | + done |
| 57 | +} |
| 58 | + |
| 59 | +PASSES=( "ABCOpt" "AllocBoxToStack" "COWArrayOpts" "CSE" "CapturePromotion" "CapturePropagation" "ClosureSpecializer" "CodeMotion" "CopyForwarding" "DCE" "DeadFunctionElimination" "DeadObjectElimination" "Devirtualizer" "EarlyInliner" "FunctionSignatureOpts" "GenericSpecializer" "GlobalARCOpts" "GlobalLoadStoreOpts" "GlobalOpt" "InlineCaches" "InstCount" "LICM" "LateInliner" "LoopRotate" "LowerAggregateInstrs" "MandatoryInlining" "Mem2Reg" "NoReturnFolding" "PerfInliner" "PerformanceConstantPropagation" "SILCleanup" "SILCombine" "SILLinker" "SROA" "SimplifyCFG" "SwiftArrayOpts" ) |
| 60 | + |
| 61 | +build_bni_with_individual_passes_disabled() { |
| 62 | + local SCRIPT=$1 |
| 63 | + local OUTPUT_DIR=$2 |
| 64 | + local PIPELINE_LENGTH="${#PIPELINES[@]}" |
| 65 | + local SEQ_END_POINT=$(($PIPELINE_LENGTH-1)) |
| 66 | + |
| 67 | + for pass in "${PASSES[@]}"; do |
| 68 | + DATA_FILE=$(printf "$OUTPUT_DIR/%s-disabled-pass.json" $pass) |
| 69 | + $SCRIPT --disable-pass "$pass" > $DATA_FILE |
| 70 | + local EXTRA_FLAGS="-DSWIFT_EXTRA_FLAGS='-Xfrontend;-external-pass-pipeline-filename;-Xfrontend;$DATA_FILE'" |
| 71 | + echo "Building Stdlib with pass $pass disabled." |
| 72 | + build_swift_stdlib SWIFT_USE_OPTIMIZED=1 SWIFT_USE_ASSERTIONS=1 SWIFT_EXTRA_CMAKE_FLAGS="$EXTRA_FLAGS" SWIFT_STDLIB_PLATFORMS=macosx-10.9-internal-x86_64 |
| 73 | + done |
| 74 | +} |
| 75 | + |
| 76 | +PIPELINE_SCRIPT=$PWD/swift/src/tools/swift/utils/pass-pipeline/scripts/normal_pipeline.py |
| 77 | +OUTPUT_DIR=$PWD/pipeline_dir |
| 78 | +rm -rfv $OUTPUT_DIR |
| 79 | +mkdir -p $OUTPUT_DIR |
| 80 | + |
| 81 | +build_bni_with_slice_pipelines_disabled "$PIPELINE_SCRIPT" "$OUTPUT_DIR" |
| 82 | +build_bni_with_individual_pipelines_disabled "$PIPELINE_SCRIPT" "$OUTPUT_DIR" |
| 83 | +build_bni_with_individual_passes_disabled "$PIPELINE_SCRIPT" "$OUTPUT_DIR" |
| 84 | + |
| 85 | +time clear_workspace |
| 86 | + |
| 87 | +set +u |
| 88 | +set +x |
0 commit comments