1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-unknown-linux-gnu | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdeclare {i32, i1} @llvm.umul.with.overflow.i32(i32 %a, i32 %b) 4*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @a(i32 %x) nounwind { 5*9880d681SAndroid Build Coastguard Worker %res = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %x, i32 3) 6*9880d681SAndroid Build Coastguard Worker %obil = extractvalue {i32, i1} %res, 1 7*9880d681SAndroid Build Coastguard Worker ret i1 %obil 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: a: 10*9880d681SAndroid Build Coastguard Worker; CHECK: mull 11*9880d681SAndroid Build Coastguard Worker; CHECK: seto %al 12*9880d681SAndroid Build Coastguard Worker; CHECK: ret 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine i32 @test2(i32 %a, i32 %b) nounwind readnone { 16*9880d681SAndroid Build Coastguard Workerentry: 17*9880d681SAndroid Build Coastguard Worker %tmp0 = add i32 %b, %a 18*9880d681SAndroid Build Coastguard Worker %tmp1 = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %tmp0, i32 2) 19*9880d681SAndroid Build Coastguard Worker %tmp2 = extractvalue { i32, i1 } %tmp1, 0 20*9880d681SAndroid Build Coastguard Worker ret i32 %tmp2 21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 22*9880d681SAndroid Build Coastguard Worker; CHECK: addl 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addl 24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine i32 @test3(i32 %a, i32 %b) nounwind readnone { 28*9880d681SAndroid Build Coastguard Workerentry: 29*9880d681SAndroid Build Coastguard Worker %tmp0 = add i32 %b, %a 30*9880d681SAndroid Build Coastguard Worker %tmp1 = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %tmp0, i32 4) 31*9880d681SAndroid Build Coastguard Worker %tmp2 = extractvalue { i32, i1 } %tmp1, 0 32*9880d681SAndroid Build Coastguard Worker ret i32 %tmp2 33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3: 34*9880d681SAndroid Build Coastguard Worker; CHECK: addl 35*9880d681SAndroid Build Coastguard Worker; CHECK: mull 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 37*9880d681SAndroid Build Coastguard Worker} 38