Created
January 17, 2022 09:40
-
-
Save pvellien/e4f519d17b25adf10fdd5978ee0b1de9 to your computer and use it in GitHub Desktop.
Compile : opt -O3 with [ConstantFold] Make icmp of gep fold offset based commit as a top commit
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; ModuleID = 'reducing_original.bc' | |
source_filename = "reducing_original.cc" | |
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" | |
target triple = "x86_64-unknown-linux-gnu" | |
%class.Isa = type <{ i32, i32, i32, i8, i8, [2 x i8] }> | |
%"struct.std::pair" = type { %class.Isa*, %class.Isa* } | |
%class.anon = type { i32*, i32*, i32*, i8*, i8* } | |
%"struct.__gnu_cxx::__ops::_Iter_pred" = type { %class.anon } | |
%"class.std::__pair_base" = type { i8 } | |
%"struct.std::random_access_iterator_tag" = type { i8 } | |
$_ZSt9make_pairIPK3IsaS2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_ = comdat any | |
$_ZSt5beginIK3IsaLm75EEPT_RAT0__S2_ = comdat any | |
$_ZSt3endIK3IsaLm75EEPT_RAT0__S2_ = comdat any | |
$_ZSt7forwardIPK3IsaEOT_RNSt16remove_referenceIS3_E4typeE = comdat any | |
$_ZNSt4pairIPK3IsaS2_EC2IS2_S2_Lb1EEEOT_OT0_ = comdat any | |
$_ZSt19__iterator_categoryIPK3IsaENSt15iterator_traitsIT_E17iterator_categoryERKS4_ = comdat any | |
@_ZZN3Isa13supportedIsasEvE14supportedIsas_ = internal constant [75 x { i32, i32, i32, i8, i8 }] [{ i32, i32, i32, i8, i8 } { i32 7, i32 0, i32 0, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 7, i32 0, i32 1, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 7, i32 0, i32 2, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 7, i32 0, i32 3, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 7, i32 0, i32 4, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 7, i32 0, i32 5, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 8, i32 0, i32 1, i8 0, i8 1 }, { i32, i32, i32, i8, i8 } { i32 8, i32 0, i32 1, i8 0, i8 2 }, { i32, i32, i32, i8, i8 } { i32 8, i32 0, i32 1, i8 0, i8 3 }, { i32, i32, i32, i8, i8 } { i32 8, i32 0, i32 2, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 8, i32 0, i32 3, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 8, i32 0, i32 5, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 8, i32 1, i32 0, i8 0, i8 1 }, { i32, i32, i32, i8, i8 } { i32 8, i32 1, i32 0, i8 0, i8 2 }, { i32, i32, i32, i8, i8 } { i32 8, i32 1, i32 0, i8 0, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 0, i8 0, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 0, i8 0, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 0, i8 0, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 2, i8 0, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 2, i8 0, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 2, i8 0, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 4, i8 0, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 4, i8 0, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 4, i8 0, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 6, i8 1, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 6, i8 2, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 6, i8 3, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 6, i8 1, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 6, i8 1, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 6, i8 2, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 6, i8 2, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 6, i8 3, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 6, i8 3, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 8, i8 1, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 8, i8 2, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 8, i8 3, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 8, i8 1, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 8, i8 1, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 8, i8 2, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 8, i8 2, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 8, i8 3, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 8, i8 3, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 2, i8 0, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 2, i8 0, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 2, i8 0, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 10, i8 1, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 10, i8 2, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 10, i8 3, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 10, i8 1, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 10, i8 1, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 10, i8 2, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 10, i8 2, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 10, i8 3, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 10, i8 3, i8 3 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 12, i8 0, i8 1 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 12, i8 0, i8 2 }, { i32, i32, i32, i8, i8 } { i32 9, i32 0, i32 12, i8 0, i8 3 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 0, i8 0, i8 1 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 0, i8 0, i8 2 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 0, i8 0, i8 3 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 1, i8 0, i8 1 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 1, i8 0, i8 2 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 1, i8 0, i8 3 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 2, i8 0, i8 1 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 2, i8 0, i8 2 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 2, i8 0, i8 3 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 3, i8 0, i8 1 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 3, i8 0, i8 2 }, { i32, i32, i32, i8, i8 } { i32 10, i32 1, i32 3, i8 0, i8 3 }, { i32, i32, i32, i8, i8 } { i32 10, i32 3, i32 0, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 10, i32 3, i32 1, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 10, i32 3, i32 2, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 10, i32 3, i32 3, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 10, i32 3, i32 4, i8 0, i8 0 }, { i32, i32, i32, i8, i8 } { i32 10, i32 3, i32 5, i8 0, i8 0 }], align 16 | |
; Function Attrs: mustprogress sanitize_address uwtable | |
define { %class.Isa*, %class.Isa* } @_ZN3Isa13supportedIsasEv() #0 align 2 { | |
entry: | |
%retval = alloca %"struct.std::pair", align 8 | |
%NONE = alloca i8, align 1 | |
%ANY = alloca i8, align 1 | |
%OFF = alloca i8, align 1 | |
%ON = alloca i8, align 1 | |
%ref.tmp = alloca %class.Isa*, align 8 | |
%ref.tmp1 = alloca %class.Isa*, align 8 | |
call void @llvm.lifetime.start.p0i8(i64 1, i8* %NONE) #7 | |
store i8 0, i8* %NONE, align 1, !tbaa !6 | |
call void @llvm.lifetime.start.p0i8(i64 1, i8* %ANY) #7 | |
store i8 1, i8* %ANY, align 1, !tbaa !6 | |
call void @llvm.lifetime.start.p0i8(i64 1, i8* %OFF) #7 | |
store i8 2, i8* %OFF, align 1, !tbaa !6 | |
call void @llvm.lifetime.start.p0i8(i64 1, i8* %ON) #7 | |
store i8 3, i8* %ON, align 1, !tbaa !6 | |
%0 = bitcast %class.Isa** %ref.tmp to i8* | |
call void @llvm.lifetime.start.p0i8(i64 8, i8* %0) #7 | |
%call = call %class.Isa* @_ZSt5beginIK3IsaLm75EEPT_RAT0__S2_([75 x %class.Isa]* nonnull align 4 dereferenceable(1200) bitcast ([75 x { i32, i32, i32, i8, i8 }]* @_ZZN3Isa13supportedIsasEvE14supportedIsas_ to [75 x %class.Isa]*)) #7 | |
store %class.Isa* %call, %class.Isa** %ref.tmp, align 8, !tbaa !10 | |
%1 = bitcast %class.Isa** %ref.tmp1 to i8* | |
call void @llvm.lifetime.start.p0i8(i64 8, i8* %1) #7 | |
%call2 = call %class.Isa* @_ZSt3endIK3IsaLm75EEPT_RAT0__S2_([75 x %class.Isa]* nonnull align 4 dereferenceable(1200) bitcast ([75 x { i32, i32, i32, i8, i8 }]* @_ZZN3Isa13supportedIsasEvE14supportedIsas_ to [75 x %class.Isa]*)) #7 | |
store %class.Isa* %call2, %class.Isa** %ref.tmp1, align 8, !tbaa !10 | |
%call3 = call { %class.Isa*, %class.Isa* } @_ZSt9make_pairIPK3IsaS2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(%class.Isa** nonnull align 8 dereferenceable(8) %ref.tmp, %class.Isa** nonnull align 8 dereferenceable(8) %ref.tmp1) | |
%2 = bitcast %"struct.std::pair"* %retval to { %class.Isa*, %class.Isa* }* | |
%3 = getelementptr inbounds { %class.Isa*, %class.Isa* }, { %class.Isa*, %class.Isa* }* %2, i32 0, i32 0 | |
%4 = extractvalue { %class.Isa*, %class.Isa* } %call3, 0 | |
store %class.Isa* %4, %class.Isa** %3, align 8 | |
%5 = getelementptr inbounds { %class.Isa*, %class.Isa* }, { %class.Isa*, %class.Isa* }* %2, i32 0, i32 1 | |
%6 = extractvalue { %class.Isa*, %class.Isa* } %call3, 1 | |
store %class.Isa* %6, %class.Isa** %5, align 8 | |
%7 = bitcast %class.Isa** %ref.tmp1 to i8* | |
call void @llvm.lifetime.end.p0i8(i64 8, i8* %7) #7 | |
%8 = bitcast %class.Isa** %ref.tmp to i8* | |
call void @llvm.lifetime.end.p0i8(i64 8, i8* %8) #7 | |
call void @llvm.lifetime.end.p0i8(i64 1, i8* %ON) #7 | |
call void @llvm.lifetime.end.p0i8(i64 1, i8* %OFF) #7 | |
call void @llvm.lifetime.end.p0i8(i64 1, i8* %ANY) #7 | |
call void @llvm.lifetime.end.p0i8(i64 1, i8* %NONE) #7 | |
%9 = bitcast %"struct.std::pair"* %retval to { %class.Isa*, %class.Isa* }* | |
%10 = load { %class.Isa*, %class.Isa* }, { %class.Isa*, %class.Isa* }* %9, align 8 | |
ret { %class.Isa*, %class.Isa* } %10 | |
} | |
; Function Attrs: argmemonly nofree nosync nounwind willreturn | |
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #1 | |
; Function Attrs: mustprogress sanitize_address uwtable | |
define linkonce_odr { %class.Isa*, %class.Isa* } @_ZSt9make_pairIPK3IsaS2_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(%class.Isa** nonnull align 8 dereferenceable(8) %__x, %class.Isa** nonnull align 8 dereferenceable(8) %__y) #0 comdat { | |
entry: | |
%retval = alloca %"struct.std::pair", align 8 | |
%__x.addr = alloca %class.Isa**, align 8 | |
%__y.addr = alloca %class.Isa**, align 8 | |
store %class.Isa** %__x, %class.Isa*** %__x.addr, align 8, !tbaa !10 | |
store %class.Isa** %__y, %class.Isa*** %__y.addr, align 8, !tbaa !10 | |
%0 = load %class.Isa**, %class.Isa*** %__x.addr, align 8, !tbaa !10 | |
%call = call nonnull align 8 dereferenceable(8) %class.Isa** @_ZSt7forwardIPK3IsaEOT_RNSt16remove_referenceIS3_E4typeE(%class.Isa** nonnull align 8 dereferenceable(8) %0) #7 | |
%1 = load %class.Isa**, %class.Isa*** %__y.addr, align 8, !tbaa !10 | |
%call1 = call nonnull align 8 dereferenceable(8) %class.Isa** @_ZSt7forwardIPK3IsaEOT_RNSt16remove_referenceIS3_E4typeE(%class.Isa** nonnull align 8 dereferenceable(8) %1) #7 | |
call void @_ZNSt4pairIPK3IsaS2_EC2IS2_S2_Lb1EEEOT_OT0_(%"struct.std::pair"* nonnull align 8 dereferenceable(16) %retval, %class.Isa** nonnull align 8 dereferenceable(8) %call, %class.Isa** nonnull align 8 dereferenceable(8) %call1) | |
%2 = bitcast %"struct.std::pair"* %retval to { %class.Isa*, %class.Isa* }* | |
%3 = load { %class.Isa*, %class.Isa* }, { %class.Isa*, %class.Isa* }* %2, align 8 | |
ret { %class.Isa*, %class.Isa* } %3 | |
} | |
; Function Attrs: inlinehint mustprogress nounwind sanitize_address uwtable | |
define linkonce_odr %class.Isa* @_ZSt5beginIK3IsaLm75EEPT_RAT0__S2_([75 x %class.Isa]* nonnull align 4 dereferenceable(1200) %__arr) #2 comdat { | |
entry: | |
%__arr.addr = alloca [75 x %class.Isa]*, align 8 | |
store [75 x %class.Isa]* %__arr, [75 x %class.Isa]** %__arr.addr, align 8, !tbaa !10 | |
%0 = load [75 x %class.Isa]*, [75 x %class.Isa]** %__arr.addr, align 8, !tbaa !10 | |
%arraydecay = getelementptr inbounds [75 x %class.Isa], [75 x %class.Isa]* %0, i64 0, i64 0 | |
ret %class.Isa* %arraydecay | |
} | |
; Function Attrs: inlinehint mustprogress nounwind sanitize_address uwtable | |
define linkonce_odr %class.Isa* @_ZSt3endIK3IsaLm75EEPT_RAT0__S2_([75 x %class.Isa]* nonnull align 4 dereferenceable(1200) %__arr) #2 comdat { | |
entry: | |
%__arr.addr = alloca [75 x %class.Isa]*, align 8 | |
store [75 x %class.Isa]* %__arr, [75 x %class.Isa]** %__arr.addr, align 8, !tbaa !10 | |
%0 = load [75 x %class.Isa]*, [75 x %class.Isa]** %__arr.addr, align 8, !tbaa !10 | |
%arraydecay = getelementptr inbounds [75 x %class.Isa], [75 x %class.Isa]* %0, i64 0, i64 0 | |
%add.ptr = getelementptr inbounds %class.Isa, %class.Isa* %arraydecay, i64 75 | |
ret %class.Isa* %add.ptr | |
} | |
; Function Attrs: argmemonly nofree nosync nounwind willreturn | |
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #1 | |
; Function Attrs: mustprogress sanitize_address uwtable | |
define %class.Isa* @_ZN3Isa7findIsaEjjjNS_7FeatureES0_(i32 %versionMajor, i32 %versionMinor, i32 %versionStepping, i8 zeroext %sramecc, i8 zeroext %xnack) #0 align 2 { | |
entry: | |
%versionMajor.addr = alloca i32, align 4 | |
%versionMinor.addr = alloca i32, align 4 | |
%versionStepping.addr = alloca i32, align 4 | |
%sramecc.addr = alloca i8, align 1 | |
%xnack.addr = alloca i8, align 1 | |
%supportedIsas_ = alloca %"struct.std::pair", align 8 | |
%isaIter = alloca %class.Isa*, align 8 | |
%agg.tmp = alloca %class.anon, align 8 | |
store i32 %versionMajor, i32* %versionMajor.addr, align 4, !tbaa !12 | |
store i32 %versionMinor, i32* %versionMinor.addr, align 4, !tbaa !12 | |
store i32 %versionStepping, i32* %versionStepping.addr, align 4, !tbaa !12 | |
store i8 %sramecc, i8* %sramecc.addr, align 1, !tbaa !6 | |
store i8 %xnack, i8* %xnack.addr, align 1, !tbaa !6 | |
%0 = bitcast %"struct.std::pair"* %supportedIsas_ to i8* | |
call void @llvm.lifetime.start.p0i8(i64 16, i8* %0) #7 | |
%call = call { %class.Isa*, %class.Isa* } @_ZN3Isa13supportedIsasEv() | |
%1 = bitcast %"struct.std::pair"* %supportedIsas_ to { %class.Isa*, %class.Isa* }* | |
%2 = getelementptr inbounds { %class.Isa*, %class.Isa* }, { %class.Isa*, %class.Isa* }* %1, i32 0, i32 0 | |
%3 = extractvalue { %class.Isa*, %class.Isa* } %call, 0 | |
store %class.Isa* %3, %class.Isa** %2, align 8 | |
%4 = getelementptr inbounds { %class.Isa*, %class.Isa* }, { %class.Isa*, %class.Isa* }* %1, i32 0, i32 1 | |
%5 = extractvalue { %class.Isa*, %class.Isa* } %call, 1 | |
store %class.Isa* %5, %class.Isa** %4, align 8 | |
%6 = bitcast %class.Isa** %isaIter to i8* | |
call void @llvm.lifetime.start.p0i8(i64 8, i8* %6) #7 | |
%first = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %supportedIsas_, i32 0, i32 0 | |
%7 = load %class.Isa*, %class.Isa** %first, align 8, !tbaa !14 | |
%second = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %supportedIsas_, i32 0, i32 1 | |
%8 = load %class.Isa*, %class.Isa** %second, align 8, !tbaa !16 | |
%9 = getelementptr inbounds %class.anon, %class.anon* %agg.tmp, i32 0, i32 0 | |
store i32* %versionMajor.addr, i32** %9, align 8, !tbaa !10 | |
%10 = getelementptr inbounds %class.anon, %class.anon* %agg.tmp, i32 0, i32 1 | |
store i32* %versionMinor.addr, i32** %10, align 8, !tbaa !10 | |
%11 = getelementptr inbounds %class.anon, %class.anon* %agg.tmp, i32 0, i32 2 | |
store i32* %versionStepping.addr, i32** %11, align 8, !tbaa !10 | |
%12 = getelementptr inbounds %class.anon, %class.anon* %agg.tmp, i32 0, i32 3 | |
store i8* %sramecc.addr, i8** %12, align 8, !tbaa !10 | |
%13 = getelementptr inbounds %class.anon, %class.anon* %agg.tmp, i32 0, i32 4 | |
store i8* %xnack.addr, i8** %13, align 8, !tbaa !10 | |
%call1 = call %class.Isa* @"_ZSt7find_ifIPK3IsaZNS0_7findIsaEjjjNS0_7FeatureES3_E3$_0ET_S5_S5_T0_"(%class.Isa* %7, %class.Isa* %8, %class.anon* byval(%class.anon) align 8 %agg.tmp) | |
store %class.Isa* %call1, %class.Isa** %isaIter, align 8, !tbaa !10 | |
%14 = load %class.Isa*, %class.Isa** %isaIter, align 8, !tbaa !10 | |
%second2 = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %supportedIsas_, i32 0, i32 1 | |
%15 = load %class.Isa*, %class.Isa** %second2, align 8, !tbaa !16 | |
%cmp = icmp eq %class.Isa* %14, %15 | |
br i1 %cmp, label %cond.true, label %cond.false | |
cond.true: ; preds = %entry | |
br label %cond.end | |
cond.false: ; preds = %entry | |
%16 = load %class.Isa*, %class.Isa** %isaIter, align 8, !tbaa !10 | |
br label %cond.end | |
cond.end: ; preds = %cond.false, %cond.true | |
%cond = phi %class.Isa* [ null, %cond.true ], [ %16, %cond.false ] | |
%17 = bitcast %class.Isa** %isaIter to i8* | |
call void @llvm.lifetime.end.p0i8(i64 8, i8* %17) #7 | |
%18 = bitcast %"struct.std::pair"* %supportedIsas_ to i8* | |
call void @llvm.lifetime.end.p0i8(i64 16, i8* %18) #7 | |
ret %class.Isa* %cond | |
} | |
; Function Attrs: inlinehint mustprogress sanitize_address uwtable | |
define internal %class.Isa* @"_ZSt7find_ifIPK3IsaZNS0_7findIsaEjjjNS0_7FeatureES3_E3$_0ET_S5_S5_T0_"(%class.Isa* %__first, %class.Isa* %__last, %class.anon* byval(%class.anon) align 8 %__pred) #3 { | |
entry: | |
%__first.addr = alloca %class.Isa*, align 8 | |
%__last.addr = alloca %class.Isa*, align 8 | |
%agg.tmp = alloca %"struct.__gnu_cxx::__ops::_Iter_pred", align 8 | |
%agg.tmp1 = alloca %class.anon, align 8 | |
store %class.Isa* %__first, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
store %class.Isa* %__last, %class.Isa** %__last.addr, align 8, !tbaa !10 | |
%0 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%1 = load %class.Isa*, %class.Isa** %__last.addr, align 8, !tbaa !10 | |
%2 = bitcast %class.anon* %agg.tmp1 to i8* | |
%3 = bitcast %class.anon* %__pred to i8* | |
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %2, i8* align 8 %3, i64 40, i1 false), !tbaa.struct !17 | |
call void @"_ZN9__gnu_cxx5__ops11__pred_iterIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EENS0_10_Iter_predIT_EES6_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* sret(%"struct.__gnu_cxx::__ops::_Iter_pred") align 8 %agg.tmp, %class.anon* byval(%class.anon) align 8 %agg.tmp1) | |
%call = call %class.Isa* @"_ZSt9__find_ifIPK3IsaN9__gnu_cxx5__ops10_Iter_predIZNS0_7findIsaEjjjNS0_7FeatureES6_E3$_0EEET_S9_S9_T0_"(%class.Isa* %0, %class.Isa* %1, %"struct.__gnu_cxx::__ops::_Iter_pred"* byval(%"struct.__gnu_cxx::__ops::_Iter_pred") align 8 %agg.tmp) | |
ret %class.Isa* %call | |
} | |
; Function Attrs: mustprogress nounwind sanitize_address uwtable | |
define linkonce_odr nonnull align 8 dereferenceable(8) %class.Isa** @_ZSt7forwardIPK3IsaEOT_RNSt16remove_referenceIS3_E4typeE(%class.Isa** nonnull align 8 dereferenceable(8) %__t) #4 comdat { | |
entry: | |
%__t.addr = alloca %class.Isa**, align 8 | |
store %class.Isa** %__t, %class.Isa*** %__t.addr, align 8, !tbaa !10 | |
%0 = load %class.Isa**, %class.Isa*** %__t.addr, align 8, !tbaa !10 | |
ret %class.Isa** %0 | |
} | |
; Function Attrs: nounwind sanitize_address uwtable | |
define linkonce_odr void @_ZNSt4pairIPK3IsaS2_EC2IS2_S2_Lb1EEEOT_OT0_(%"struct.std::pair"* nonnull align 8 dereferenceable(16) %this, %class.Isa** nonnull align 8 dereferenceable(8) %__x, %class.Isa** nonnull align 8 dereferenceable(8) %__y) unnamed_addr #5 comdat align 2 { | |
entry: | |
%this.addr = alloca %"struct.std::pair"*, align 8 | |
%__x.addr = alloca %class.Isa**, align 8 | |
%__y.addr = alloca %class.Isa**, align 8 | |
store %"struct.std::pair"* %this, %"struct.std::pair"** %this.addr, align 8, !tbaa !10 | |
store %class.Isa** %__x, %class.Isa*** %__x.addr, align 8, !tbaa !10 | |
store %class.Isa** %__y, %class.Isa*** %__y.addr, align 8, !tbaa !10 | |
%this1 = load %"struct.std::pair"*, %"struct.std::pair"** %this.addr, align 8 | |
%0 = bitcast %"struct.std::pair"* %this1 to %"class.std::__pair_base"* | |
%first = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %this1, i32 0, i32 0 | |
%1 = load %class.Isa**, %class.Isa*** %__x.addr, align 8, !tbaa !10 | |
%call = call nonnull align 8 dereferenceable(8) %class.Isa** @_ZSt7forwardIPK3IsaEOT_RNSt16remove_referenceIS3_E4typeE(%class.Isa** nonnull align 8 dereferenceable(8) %1) #7 | |
%2 = load %class.Isa*, %class.Isa** %call, align 8, !tbaa !10 | |
store %class.Isa* %2, %class.Isa** %first, align 8, !tbaa !14 | |
%second = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %this1, i32 0, i32 1 | |
%3 = load %class.Isa**, %class.Isa*** %__y.addr, align 8, !tbaa !10 | |
%call2 = call nonnull align 8 dereferenceable(8) %class.Isa** @_ZSt7forwardIPK3IsaEOT_RNSt16remove_referenceIS3_E4typeE(%class.Isa** nonnull align 8 dereferenceable(8) %3) #7 | |
%4 = load %class.Isa*, %class.Isa** %call2, align 8, !tbaa !10 | |
store %class.Isa* %4, %class.Isa** %second, align 8, !tbaa !16 | |
ret void | |
} | |
; Function Attrs: inlinehint mustprogress sanitize_address uwtable | |
define internal %class.Isa* @"_ZSt9__find_ifIPK3IsaN9__gnu_cxx5__ops10_Iter_predIZNS0_7findIsaEjjjNS0_7FeatureES6_E3$_0EEET_S9_S9_T0_"(%class.Isa* %__first, %class.Isa* %__last, %"struct.__gnu_cxx::__ops::_Iter_pred"* byval(%"struct.__gnu_cxx::__ops::_Iter_pred") align 8 %__pred) #3 { | |
entry: | |
%__first.addr = alloca %class.Isa*, align 8 | |
%__last.addr = alloca %class.Isa*, align 8 | |
%agg.tmp = alloca %"struct.__gnu_cxx::__ops::_Iter_pred", align 8 | |
%agg.tmp1 = alloca %"struct.std::random_access_iterator_tag", align 1 | |
%undef.agg.tmp = alloca %"struct.std::random_access_iterator_tag", align 1 | |
store %class.Isa* %__first, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
store %class.Isa* %__last, %class.Isa** %__last.addr, align 8, !tbaa !10 | |
%0 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%1 = load %class.Isa*, %class.Isa** %__last.addr, align 8, !tbaa !10 | |
%2 = bitcast %"struct.__gnu_cxx::__ops::_Iter_pred"* %agg.tmp to i8* | |
%3 = bitcast %"struct.__gnu_cxx::__ops::_Iter_pred"* %__pred to i8* | |
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %2, i8* align 8 %3, i64 40, i1 false), !tbaa.struct !17 | |
call void @_ZSt19__iterator_categoryIPK3IsaENSt15iterator_traitsIT_E17iterator_categoryERKS4_(%class.Isa** nonnull align 8 dereferenceable(8) %__first.addr) | |
%call = call %class.Isa* @"_ZSt9__find_ifIPK3IsaN9__gnu_cxx5__ops10_Iter_predIZNS0_7findIsaEjjjNS0_7FeatureES6_E3$_0EEET_S9_S9_T0_St26random_access_iterator_tag"(%class.Isa* %0, %class.Isa* %1, %"struct.__gnu_cxx::__ops::_Iter_pred"* byval(%"struct.__gnu_cxx::__ops::_Iter_pred") align 8 %agg.tmp) | |
ret %class.Isa* %call | |
} | |
; Function Attrs: inlinehint mustprogress sanitize_address uwtable | |
define internal void @"_ZN9__gnu_cxx5__ops11__pred_iterIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EENS0_10_Iter_predIT_EES6_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* noalias sret(%"struct.__gnu_cxx::__ops::_Iter_pred") align 8 %agg.result, %class.anon* byval(%class.anon) align 8 %__pred) #3 { | |
entry: | |
%agg.tmp = alloca %class.anon, align 8 | |
%call = call nonnull align 8 dereferenceable(40) %class.anon* @"_ZSt4moveIRZN3Isa7findIsaEjjjNS0_7FeatureES1_E3$_0EONSt16remove_referenceIT_E4typeEOS5_"(%class.anon* nonnull align 8 dereferenceable(40) %__pred) #7 | |
%0 = bitcast %class.anon* %agg.tmp to i8* | |
%1 = bitcast %class.anon* %call to i8* | |
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 40, i1 false), !tbaa.struct !17 | |
call void @"_ZN9__gnu_cxx5__ops10_Iter_predIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EC2ES4_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* nonnull align 8 dereferenceable(40) %agg.result, %class.anon* byval(%class.anon) align 8 %agg.tmp) | |
ret void | |
} | |
; Function Attrs: argmemonly nofree nounwind willreturn | |
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #6 | |
; Function Attrs: mustprogress sanitize_address uwtable | |
define internal %class.Isa* @"_ZSt9__find_ifIPK3IsaN9__gnu_cxx5__ops10_Iter_predIZNS0_7findIsaEjjjNS0_7FeatureES6_E3$_0EEET_S9_S9_T0_St26random_access_iterator_tag"(%class.Isa* %__first, %class.Isa* %__last, %"struct.__gnu_cxx::__ops::_Iter_pred"* byval(%"struct.__gnu_cxx::__ops::_Iter_pred") align 8 %__pred) #0 { | |
entry: | |
%retval = alloca %class.Isa*, align 8 | |
%0 = alloca %"struct.std::random_access_iterator_tag", align 1 | |
%__first.addr = alloca %class.Isa*, align 8 | |
%__last.addr = alloca %class.Isa*, align 8 | |
%__trip_count = alloca i64, align 8 | |
%cleanup.dest.slot = alloca i32, align 4 | |
store %class.Isa* %__first, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
store %class.Isa* %__last, %class.Isa** %__last.addr, align 8, !tbaa !10 | |
%1 = bitcast i64* %__trip_count to i8* | |
call void @llvm.lifetime.start.p0i8(i64 8, i8* %1) #7 | |
%2 = load %class.Isa*, %class.Isa** %__last.addr, align 8, !tbaa !10 | |
%3 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%sub.ptr.lhs.cast = ptrtoint %class.Isa* %2 to i64 | |
%sub.ptr.rhs.cast = ptrtoint %class.Isa* %3 to i64 | |
%sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast | |
%sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 16 | |
%shr = ashr i64 %sub.ptr.div, 2 | |
store i64 %shr, i64* %__trip_count, align 8, !tbaa !18 | |
br label %for.cond | |
for.cond: ; preds = %for.inc, %entry | |
%4 = load i64, i64* %__trip_count, align 8, !tbaa !18 | |
%cmp = icmp sgt i64 %4, 0 | |
br i1 %cmp, label %for.body, label %for.end | |
for.body: ; preds = %for.cond | |
%5 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%call = call zeroext i1 @"_ZN9__gnu_cxx5__ops10_Iter_predIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EclIPKS2_EEbT_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* nonnull align 8 dereferenceable(40) %__pred, %class.Isa* %5) | |
br i1 %call, label %if.then, label %if.end | |
if.then: ; preds = %for.body | |
%6 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
store %class.Isa* %6, %class.Isa** %retval, align 8 | |
store i32 1, i32* %cleanup.dest.slot, align 4 | |
br label %cleanup | |
if.end: ; preds = %for.body | |
%7 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%incdec.ptr = getelementptr inbounds %class.Isa, %class.Isa* %7, i32 1 | |
store %class.Isa* %incdec.ptr, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%8 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%call1 = call zeroext i1 @"_ZN9__gnu_cxx5__ops10_Iter_predIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EclIPKS2_EEbT_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* nonnull align 8 dereferenceable(40) %__pred, %class.Isa* %8) | |
br i1 %call1, label %if.then2, label %if.end3 | |
if.then2: ; preds = %if.end | |
%9 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
store %class.Isa* %9, %class.Isa** %retval, align 8 | |
store i32 1, i32* %cleanup.dest.slot, align 4 | |
br label %cleanup | |
if.end3: ; preds = %if.end | |
%10 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%incdec.ptr4 = getelementptr inbounds %class.Isa, %class.Isa* %10, i32 1 | |
store %class.Isa* %incdec.ptr4, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%11 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%call5 = call zeroext i1 @"_ZN9__gnu_cxx5__ops10_Iter_predIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EclIPKS2_EEbT_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* nonnull align 8 dereferenceable(40) %__pred, %class.Isa* %11) | |
br i1 %call5, label %if.then6, label %if.end7 | |
if.then6: ; preds = %if.end3 | |
%12 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
store %class.Isa* %12, %class.Isa** %retval, align 8 | |
store i32 1, i32* %cleanup.dest.slot, align 4 | |
br label %cleanup | |
if.end7: ; preds = %if.end3 | |
%13 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%incdec.ptr8 = getelementptr inbounds %class.Isa, %class.Isa* %13, i32 1 | |
store %class.Isa* %incdec.ptr8, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%14 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%call9 = call zeroext i1 @"_ZN9__gnu_cxx5__ops10_Iter_predIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EclIPKS2_EEbT_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* nonnull align 8 dereferenceable(40) %__pred, %class.Isa* %14) | |
br i1 %call9, label %if.then10, label %if.end11 | |
if.then10: ; preds = %if.end7 | |
%15 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
store %class.Isa* %15, %class.Isa** %retval, align 8 | |
store i32 1, i32* %cleanup.dest.slot, align 4 | |
br label %cleanup | |
if.end11: ; preds = %if.end7 | |
%16 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%incdec.ptr12 = getelementptr inbounds %class.Isa, %class.Isa* %16, i32 1 | |
store %class.Isa* %incdec.ptr12, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
br label %for.inc | |
for.inc: ; preds = %if.end11 | |
%17 = load i64, i64* %__trip_count, align 8, !tbaa !18 | |
%dec = add nsw i64 %17, -1 | |
store i64 %dec, i64* %__trip_count, align 8, !tbaa !18 | |
br label %for.cond, !llvm.loop !20 | |
for.end: ; preds = %for.cond | |
%18 = load %class.Isa*, %class.Isa** %__last.addr, align 8, !tbaa !10 | |
%19 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%sub.ptr.lhs.cast13 = ptrtoint %class.Isa* %18 to i64 | |
%sub.ptr.rhs.cast14 = ptrtoint %class.Isa* %19 to i64 | |
%sub.ptr.sub15 = sub i64 %sub.ptr.lhs.cast13, %sub.ptr.rhs.cast14 | |
%sub.ptr.div16 = sdiv exact i64 %sub.ptr.sub15, 16 | |
switch i64 %sub.ptr.div16, label %sw.default [ | |
i64 3, label %sw.bb | |
i64 2, label %sw.bb21 | |
i64 1, label %sw.bb26 | |
i64 0, label %sw.bb31 | |
] | |
sw.bb: ; preds = %for.end | |
%20 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%call17 = call zeroext i1 @"_ZN9__gnu_cxx5__ops10_Iter_predIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EclIPKS2_EEbT_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* nonnull align 8 dereferenceable(40) %__pred, %class.Isa* %20) | |
br i1 %call17, label %if.then18, label %if.end19 | |
if.then18: ; preds = %sw.bb | |
%21 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
store %class.Isa* %21, %class.Isa** %retval, align 8 | |
store i32 1, i32* %cleanup.dest.slot, align 4 | |
br label %cleanup | |
if.end19: ; preds = %sw.bb | |
%22 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%incdec.ptr20 = getelementptr inbounds %class.Isa, %class.Isa* %22, i32 1 | |
store %class.Isa* %incdec.ptr20, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
br label %sw.bb21 | |
sw.bb21: ; preds = %for.end, %if.end19 | |
%23 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%call22 = call zeroext i1 @"_ZN9__gnu_cxx5__ops10_Iter_predIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EclIPKS2_EEbT_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* nonnull align 8 dereferenceable(40) %__pred, %class.Isa* %23) | |
br i1 %call22, label %if.then23, label %if.end24 | |
if.then23: ; preds = %sw.bb21 | |
%24 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
store %class.Isa* %24, %class.Isa** %retval, align 8 | |
store i32 1, i32* %cleanup.dest.slot, align 4 | |
br label %cleanup | |
if.end24: ; preds = %sw.bb21 | |
%25 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%incdec.ptr25 = getelementptr inbounds %class.Isa, %class.Isa* %25, i32 1 | |
store %class.Isa* %incdec.ptr25, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
br label %sw.bb26 | |
sw.bb26: ; preds = %for.end, %if.end24 | |
%26 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%call27 = call zeroext i1 @"_ZN9__gnu_cxx5__ops10_Iter_predIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EclIPKS2_EEbT_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* nonnull align 8 dereferenceable(40) %__pred, %class.Isa* %26) | |
br i1 %call27, label %if.then28, label %if.end29 | |
if.then28: ; preds = %sw.bb26 | |
%27 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
store %class.Isa* %27, %class.Isa** %retval, align 8 | |
store i32 1, i32* %cleanup.dest.slot, align 4 | |
br label %cleanup | |
if.end29: ; preds = %sw.bb26 | |
%28 = load %class.Isa*, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
%incdec.ptr30 = getelementptr inbounds %class.Isa, %class.Isa* %28, i32 1 | |
store %class.Isa* %incdec.ptr30, %class.Isa** %__first.addr, align 8, !tbaa !10 | |
br label %sw.bb31 | |
sw.bb31: ; preds = %for.end, %if.end29 | |
br label %sw.default | |
sw.default: ; preds = %for.end, %sw.bb31 | |
%29 = load %class.Isa*, %class.Isa** %__last.addr, align 8, !tbaa !10 | |
store %class.Isa* %29, %class.Isa** %retval, align 8 | |
store i32 1, i32* %cleanup.dest.slot, align 4 | |
br label %cleanup | |
cleanup: ; preds = %sw.default, %if.then28, %if.then23, %if.then18, %if.then10, %if.then6, %if.then2, %if.then | |
%30 = bitcast i64* %__trip_count to i8* | |
call void @llvm.lifetime.end.p0i8(i64 8, i8* %30) #7 | |
%31 = load %class.Isa*, %class.Isa** %retval, align 8 | |
ret %class.Isa* %31 | |
} | |
; Function Attrs: inlinehint mustprogress nounwind sanitize_address uwtable | |
define linkonce_odr void @_ZSt19__iterator_categoryIPK3IsaENSt15iterator_traitsIT_E17iterator_categoryERKS4_(%class.Isa** nonnull align 8 dereferenceable(8) %0) #2 comdat { | |
entry: | |
%.addr = alloca %class.Isa**, align 8 | |
store %class.Isa** %0, %class.Isa*** %.addr, align 8, !tbaa !10 | |
ret void | |
} | |
; Function Attrs: mustprogress sanitize_address uwtable | |
define internal zeroext i1 @"_ZN9__gnu_cxx5__ops10_Iter_predIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EclIPKS2_EEbT_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* nonnull align 8 dereferenceable(40) %this, %class.Isa* %__it) #0 align 2 { | |
entry: | |
%this.addr = alloca %"struct.__gnu_cxx::__ops::_Iter_pred"*, align 8 | |
%__it.addr = alloca %class.Isa*, align 8 | |
store %"struct.__gnu_cxx::__ops::_Iter_pred"* %this, %"struct.__gnu_cxx::__ops::_Iter_pred"** %this.addr, align 8, !tbaa !10 | |
store %class.Isa* %__it, %class.Isa** %__it.addr, align 8, !tbaa !10 | |
%this1 = load %"struct.__gnu_cxx::__ops::_Iter_pred"*, %"struct.__gnu_cxx::__ops::_Iter_pred"** %this.addr, align 8 | |
%_M_pred = getelementptr inbounds %"struct.__gnu_cxx::__ops::_Iter_pred", %"struct.__gnu_cxx::__ops::_Iter_pred"* %this1, i32 0, i32 0 | |
%0 = load %class.Isa*, %class.Isa** %__it.addr, align 8, !tbaa !10 | |
%call = call zeroext i1 @"_ZZN3Isa7findIsaEjjjNS_7FeatureES0_ENK3$_0clERKS_"(%class.anon* nonnull align 8 dereferenceable(40) %_M_pred, %class.Isa* nonnull align 4 dereferenceable(14) %0) | |
ret i1 %call | |
} | |
; Function Attrs: inlinehint mustprogress nounwind sanitize_address uwtable | |
define internal zeroext i1 @"_ZZN3Isa7findIsaEjjjNS_7FeatureES0_ENK3$_0clERKS_"(%class.anon* nonnull align 8 dereferenceable(40) %this, %class.Isa* nonnull align 4 dereferenceable(14) %isa) #2 align 2 { | |
entry: | |
%this.addr = alloca %class.anon*, align 8 | |
%isa.addr = alloca %class.Isa*, align 8 | |
store %class.anon* %this, %class.anon** %this.addr, align 8, !tbaa !10 | |
store %class.Isa* %isa, %class.Isa** %isa.addr, align 8, !tbaa !10 | |
%this1 = load %class.anon*, %class.anon** %this.addr, align 8 | |
%0 = getelementptr inbounds %class.anon, %class.anon* %this1, i32 0, i32 0 | |
%1 = load i32*, i32** %0, align 8, !tbaa !22 | |
%2 = load i32, i32* %1, align 4, !tbaa !12 | |
%3 = load %class.Isa*, %class.Isa** %isa.addr, align 8, !tbaa !10 | |
%versionMajor_ = getelementptr inbounds %class.Isa, %class.Isa* %3, i32 0, i32 0 | |
%4 = load i32, i32* %versionMajor_, align 4, !tbaa !24 | |
%cmp = icmp eq i32 %2, %4 | |
br i1 %cmp, label %land.lhs.true, label %land.end | |
land.lhs.true: ; preds = %entry | |
%5 = getelementptr inbounds %class.anon, %class.anon* %this1, i32 0, i32 1 | |
%6 = load i32*, i32** %5, align 8, !tbaa !26 | |
%7 = load i32, i32* %6, align 4, !tbaa !12 | |
%8 = load %class.Isa*, %class.Isa** %isa.addr, align 8, !tbaa !10 | |
%versionMinor_ = getelementptr inbounds %class.Isa, %class.Isa* %8, i32 0, i32 1 | |
%9 = load i32, i32* %versionMinor_, align 4, !tbaa !27 | |
%cmp2 = icmp eq i32 %7, %9 | |
br i1 %cmp2, label %land.lhs.true3, label %land.end | |
land.lhs.true3: ; preds = %land.lhs.true | |
%10 = getelementptr inbounds %class.anon, %class.anon* %this1, i32 0, i32 2 | |
%11 = load i32*, i32** %10, align 8, !tbaa !28 | |
%12 = load i32, i32* %11, align 4, !tbaa !12 | |
%13 = load %class.Isa*, %class.Isa** %isa.addr, align 8, !tbaa !10 | |
%versionStepping_ = getelementptr inbounds %class.Isa, %class.Isa* %13, i32 0, i32 2 | |
%14 = load i32, i32* %versionStepping_, align 4, !tbaa !29 | |
%cmp4 = icmp eq i32 %12, %14 | |
br i1 %cmp4, label %land.lhs.true5, label %land.end | |
land.lhs.true5: ; preds = %land.lhs.true3 | |
%15 = load %class.Isa*, %class.Isa** %isa.addr, align 8, !tbaa !10 | |
%sramecc_ = getelementptr inbounds %class.Isa, %class.Isa* %15, i32 0, i32 3 | |
%16 = load i8, i8* %sramecc_, align 4, !tbaa !30 | |
%cmp6 = icmp eq i8 %16, 0 | |
br i1 %cmp6, label %land.rhs, label %lor.lhs.false | |
lor.lhs.false: ; preds = %land.lhs.true5 | |
%17 = load %class.Isa*, %class.Isa** %isa.addr, align 8, !tbaa !10 | |
%sramecc_7 = getelementptr inbounds %class.Isa, %class.Isa* %17, i32 0, i32 3 | |
%18 = load i8, i8* %sramecc_7, align 4, !tbaa !30 | |
%19 = getelementptr inbounds %class.anon, %class.anon* %this1, i32 0, i32 3 | |
%20 = load i8*, i8** %19, align 8, !tbaa !31 | |
%21 = load i8, i8* %20, align 1, !tbaa !6 | |
%cmp8 = icmp eq i8 %18, %21 | |
br i1 %cmp8, label %land.rhs, label %land.end | |
land.rhs: ; preds = %lor.lhs.false, %land.lhs.true5 | |
%22 = load %class.Isa*, %class.Isa** %isa.addr, align 8, !tbaa !10 | |
%xnack_ = getelementptr inbounds %class.Isa, %class.Isa* %22, i32 0, i32 4 | |
%23 = load i8, i8* %xnack_, align 1, !tbaa !32 | |
%cmp9 = icmp eq i8 %23, 0 | |
br i1 %cmp9, label %lor.end, label %lor.rhs | |
lor.rhs: ; preds = %land.rhs | |
%24 = load %class.Isa*, %class.Isa** %isa.addr, align 8, !tbaa !10 | |
%xnack_10 = getelementptr inbounds %class.Isa, %class.Isa* %24, i32 0, i32 4 | |
%25 = load i8, i8* %xnack_10, align 1, !tbaa !32 | |
%26 = getelementptr inbounds %class.anon, %class.anon* %this1, i32 0, i32 4 | |
%27 = load i8*, i8** %26, align 8, !tbaa !33 | |
%28 = load i8, i8* %27, align 1, !tbaa !6 | |
%cmp11 = icmp eq i8 %25, %28 | |
br label %lor.end | |
lor.end: ; preds = %lor.rhs, %land.rhs | |
%29 = phi i1 [ true, %land.rhs ], [ %cmp11, %lor.rhs ] | |
br label %land.end | |
land.end: ; preds = %lor.end, %lor.lhs.false, %land.lhs.true3, %land.lhs.true, %entry | |
%30 = phi i1 [ false, %lor.lhs.false ], [ false, %land.lhs.true3 ], [ false, %land.lhs.true ], [ false, %entry ], [ %29, %lor.end ] | |
ret i1 %30 | |
} | |
; Function Attrs: mustprogress nounwind sanitize_address uwtable | |
define internal nonnull align 8 dereferenceable(40) %class.anon* @"_ZSt4moveIRZN3Isa7findIsaEjjjNS0_7FeatureES1_E3$_0EONSt16remove_referenceIT_E4typeEOS5_"(%class.anon* nonnull align 8 dereferenceable(40) %__t) #4 { | |
entry: | |
%__t.addr = alloca %class.anon*, align 8 | |
store %class.anon* %__t, %class.anon** %__t.addr, align 8, !tbaa !10 | |
%0 = load %class.anon*, %class.anon** %__t.addr, align 8, !tbaa !10 | |
ret %class.anon* %0 | |
} | |
; Function Attrs: nounwind sanitize_address uwtable | |
define internal void @"_ZN9__gnu_cxx5__ops10_Iter_predIZN3Isa7findIsaEjjjNS2_7FeatureES3_E3$_0EC2ES4_"(%"struct.__gnu_cxx::__ops::_Iter_pred"* nonnull align 8 dereferenceable(40) %this, %class.anon* byval(%class.anon) align 8 %__pred) unnamed_addr #5 align 2 { | |
entry: | |
%this.addr = alloca %"struct.__gnu_cxx::__ops::_Iter_pred"*, align 8 | |
store %"struct.__gnu_cxx::__ops::_Iter_pred"* %this, %"struct.__gnu_cxx::__ops::_Iter_pred"** %this.addr, align 8, !tbaa !10 | |
%this1 = load %"struct.__gnu_cxx::__ops::_Iter_pred"*, %"struct.__gnu_cxx::__ops::_Iter_pred"** %this.addr, align 8 | |
%_M_pred = getelementptr inbounds %"struct.__gnu_cxx::__ops::_Iter_pred", %"struct.__gnu_cxx::__ops::_Iter_pred"* %this1, i32 0, i32 0 | |
%call = call nonnull align 8 dereferenceable(40) %class.anon* @"_ZSt4moveIRZN3Isa7findIsaEjjjNS0_7FeatureES1_E3$_0EONSt16remove_referenceIT_E4typeEOS5_"(%class.anon* nonnull align 8 dereferenceable(40) %__pred) #7 | |
%0 = bitcast %class.anon* %_M_pred to i8* | |
%1 = bitcast %class.anon* %call to i8* | |
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 40, i1 false), !tbaa.struct !17 | |
ret void | |
} | |
attributes #0 = { mustprogress sanitize_address uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } | |
attributes #1 = { argmemonly nofree nosync nounwind willreturn } | |
attributes #2 = { inlinehint mustprogress nounwind sanitize_address uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } | |
attributes #3 = { inlinehint mustprogress sanitize_address uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } | |
attributes #4 = { mustprogress nounwind sanitize_address uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } | |
attributes #5 = { nounwind sanitize_address uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } | |
attributes #6 = { argmemonly nofree nounwind willreturn } | |
attributes #7 = { nounwind } | |
!llvm.asan.globals = !{!0} | |
!llvm.module.flags = !{!2, !3, !4} | |
!llvm.ident = !{!5} | |
!0 = !{[75 x { i32, i32, i32, i8, i8 }]* @_ZZN3Isa13supportedIsasEvE14supportedIsas_, !1, !"supportedIsas_", i1 false, i1 false} | |
!1 = !{!"reducing_original.cc", i32 42, i32 24} | |
!2 = !{i32 1, !"wchar_size", i32 4} | |
!3 = !{i32 7, !"PIC Level", i32 2} | |
!4 = !{i32 7, !"uwtable", i32 1} | |
!5 = !{!"AMD clang version 14.0.0 (ssh://gerritgit/lightning/ec/llvm-project amd-stg-open 22012 5afbfe33e7d6ce40af0ad6d99421b443c45b351b)"} | |
!6 = !{!7, !7, i64 0} | |
!7 = !{!"_ZTSN3Isa7FeatureE", !8, i64 0} | |
!8 = !{!"omnipotent char", !9, i64 0} | |
!9 = !{!"Simple C++ TBAA"} | |
!10 = !{!11, !11, i64 0} | |
!11 = !{!"any pointer", !8, i64 0} | |
!12 = !{!13, !13, i64 0} | |
!13 = !{!"int", !8, i64 0} | |
!14 = !{!15, !11, i64 0} | |
!15 = !{!"_ZTSSt4pairIPK3IsaS2_E", !11, i64 0, !11, i64 8} | |
!16 = !{!15, !11, i64 8} | |
!17 = !{i64 0, i64 8, !10, i64 8, i64 8, !10, i64 16, i64 8, !10, i64 24, i64 8, !10, i64 32, i64 8, !10} | |
!18 = !{!19, !19, i64 0} | |
!19 = !{!"long", !8, i64 0} | |
!20 = distinct !{!20, !21} | |
!21 = !{!"llvm.loop.mustprogress"} | |
!22 = !{!23, !11, i64 0} | |
!23 = !{!"_ZTSZN3Isa7findIsaEjjjNS_7FeatureES0_E3$_0", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32} | |
!24 = !{!25, !13, i64 0} | |
!25 = !{!"_ZTS3Isa", !13, i64 0, !13, i64 4, !13, i64 8, !7, i64 12, !7, i64 13} | |
!26 = !{!23, !11, i64 8} | |
!27 = !{!25, !13, i64 4} | |
!28 = !{!23, !11, i64 16} | |
!29 = !{!25, !13, i64 8} | |
!30 = !{!25, !7, i64 12} | |
!31 = !{!23, !11, i64 24} | |
!32 = !{!25, !7, i64 13} | |
!33 = !{!23, !11, i64 32} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment