Skip to content

Instantly share code, notes, and snippets.

@pvellien
Created January 17, 2022 09:40
Show Gist options
  • Save pvellien/e4f519d17b25adf10fdd5978ee0b1de9 to your computer and use it in GitHub Desktop.
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
; 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