1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple x86_64-apple-darwin11 -O0 -fast-isel-abort=1 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker%struct.x = type { i64, i64 } 4*9880d681SAndroid Build Coastguard Worker%addovf = type { i32, i1 } 5*9880d681SAndroid Build Coastguard Workerdeclare %struct.x @f() 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine void @test1(i64*) nounwind ssp { 8*9880d681SAndroid Build Coastguard Worker %2 = tail call %struct.x @f() nounwind 9*9880d681SAndroid Build Coastguard Worker %3 = extractvalue %struct.x %2, 0 10*9880d681SAndroid Build Coastguard Worker %4 = add i64 %3, 10 11*9880d681SAndroid Build Coastguard Worker store i64 %4, i64* %0 12*9880d681SAndroid Build Coastguard Worker ret void 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1: 14*9880d681SAndroid Build Coastguard Worker; CHECK: callq _f 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addq $10, %rax 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdefine void @test2(i64*) nounwind ssp { 19*9880d681SAndroid Build Coastguard Worker %2 = tail call %struct.x @f() nounwind 20*9880d681SAndroid Build Coastguard Worker %3 = extractvalue %struct.x %2, 1 21*9880d681SAndroid Build Coastguard Worker %4 = add i64 %3, 10 22*9880d681SAndroid Build Coastguard Worker store i64 %4, i64* %0 23*9880d681SAndroid Build Coastguard Worker ret void 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 25*9880d681SAndroid Build Coastguard Worker; CHECK: callq _f 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addq $10, %rdx 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdeclare %addovf @llvm.sadd.with.overflow.i32(i32, i32) nounwind readnone 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdefine void @test3(i32 %x, i32 %y, i32* %z) { 32*9880d681SAndroid Build Coastguard Worker %r = call %addovf @llvm.sadd.with.overflow.i32(i32 %x, i32 %y) 33*9880d681SAndroid Build Coastguard Worker %sum = extractvalue %addovf %r, 0 34*9880d681SAndroid Build Coastguard Worker %sum3 = mul i32 %sum, 3 35*9880d681SAndroid Build Coastguard Worker %bit = extractvalue %addovf %r, 1 36*9880d681SAndroid Build Coastguard Worker br i1 %bit, label %then, label %end 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerthen: 39*9880d681SAndroid Build Coastguard Worker store i32 %sum3, i32* %z 40*9880d681SAndroid Build Coastguard Worker br label %end 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerend: 43*9880d681SAndroid Build Coastguard Worker ret void 44*9880d681SAndroid Build Coastguard Worker; CHECK: test3 45*9880d681SAndroid Build Coastguard Worker; CHECK: addl 46*9880d681SAndroid Build Coastguard Worker; CHECK: seto %al 47*9880d681SAndroid Build Coastguard Worker; CHECK: testb $1, %al 48*9880d681SAndroid Build Coastguard Worker} 49