brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.1 KiB · c3435da Raw
497 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=X643; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+cmov | FileCheck %s --check-prefixes=CMOV4; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefixes=NOCMOV5 6; PR468097 8define i32 @sadd_add_imm(i32 %x, i32 %y) {9; X64-LABEL: sadd_add_imm:10; X64:       # %bb.0:11; X64-NEXT:    # kill: def $edi killed $edi def $rdi12; X64-NEXT:    addl %esi, %edi13; X64-NEXT:    leal 100(%rdi), %eax14; X64-NEXT:    cmovnol %edi, %eax15; X64-NEXT:    retq16;17; CMOV-LABEL: sadd_add_imm:18; CMOV:       # %bb.0:19; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx20; CMOV-NEXT:    addl {{[0-9]+}}(%esp), %ecx21; CMOV-NEXT:    leal 100(%ecx), %eax22; CMOV-NEXT:    cmovnol %ecx, %eax23; CMOV-NEXT:    retl24;25; NOCMOV-LABEL: sadd_add_imm:26; NOCMOV:       # %bb.0:27; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax28; NOCMOV-NEXT:    addl {{[0-9]+}}(%esp), %eax29; NOCMOV-NEXT:    jno .LBB0_230; NOCMOV-NEXT:  # %bb.1:31; NOCMOV-NEXT:    addl $100, %eax32; NOCMOV-NEXT:  .LBB0_2:33; NOCMOV-NEXT:    retl34  %o = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %x, i32 %y)35  %v1 = extractvalue { i32, i1 } %o, 136  %v2 = extractvalue { i32, i1 } %o, 037  %a = add i32 %v2, 10038  %r = select i1 %v1, i32 %a, i32 %v239  ret i32 %r40}41 42define i32 @sadd_add_load(i32 %x, i32 %y, ptr %pz) nounwind {43; X64-LABEL: sadd_add_load:44; X64:       # %bb.0:45; X64-NEXT:    # kill: def $esi killed $esi def $rsi46; X64-NEXT:    # kill: def $edi killed $edi def $rdi47; X64-NEXT:    leal (%rdi,%rsi), %eax48; X64-NEXT:    addl (%rdx), %eax49; X64-NEXT:    addl %esi, %edi50; X64-NEXT:    cmovnol %edi, %eax51; X64-NEXT:    retq52;53; CMOV-LABEL: sadd_add_load:54; CMOV:       # %bb.0:55; CMOV-NEXT:    pushl %esi56; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx57; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax58; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %edx59; CMOV-NEXT:    leal (%eax,%edx), %esi60; CMOV-NEXT:    addl (%ecx), %esi61; CMOV-NEXT:    addl %edx, %eax62; CMOV-NEXT:    cmovol %esi, %eax63; CMOV-NEXT:    popl %esi64; CMOV-NEXT:    retl65;66; NOCMOV-LABEL: sadd_add_load:67; NOCMOV:       # %bb.0:68; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax69; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %edx70; NOCMOV-NEXT:    leal (%eax,%edx), %ecx71; NOCMOV-NEXT:    addl %edx, %eax72; NOCMOV-NEXT:    jno .LBB1_273; NOCMOV-NEXT:  # %bb.1:74; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax75; NOCMOV-NEXT:    addl (%eax), %ecx76; NOCMOV-NEXT:    movl %ecx, %eax77; NOCMOV-NEXT:  .LBB1_2:78; NOCMOV-NEXT:    retl79  %o = tail call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %x, i32 %y)80  %v1 = extractvalue { i32, i1 } %o, 181  %v2 = extractvalue { i32, i1 } %o, 082  %z = load i32, ptr %pz83  %a = add i32 %v2, %z84  %r = select i1 %v1, i32 %a, i32 %v285  ret i32 %r86}87 88define i32 @uadd_add_imm(i32 %x, i32 %y) {89; X64-LABEL: uadd_add_imm:90; X64:       # %bb.0:91; X64-NEXT:    # kill: def $edi killed $edi def $rdi92; X64-NEXT:    addl %esi, %edi93; X64-NEXT:    leal 100(%rdi), %eax94; X64-NEXT:    cmovael %edi, %eax95; X64-NEXT:    retq96;97; CMOV-LABEL: uadd_add_imm:98; CMOV:       # %bb.0:99; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx100; CMOV-NEXT:    addl {{[0-9]+}}(%esp), %ecx101; CMOV-NEXT:    leal 100(%ecx), %eax102; CMOV-NEXT:    cmovael %ecx, %eax103; CMOV-NEXT:    retl104;105; NOCMOV-LABEL: uadd_add_imm:106; NOCMOV:       # %bb.0:107; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax108; NOCMOV-NEXT:    addl {{[0-9]+}}(%esp), %eax109; NOCMOV-NEXT:    jae .LBB2_2110; NOCMOV-NEXT:  # %bb.1:111; NOCMOV-NEXT:    addl $100, %eax112; NOCMOV-NEXT:  .LBB2_2:113; NOCMOV-NEXT:    retl114  %o = tail call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)115  %v1 = extractvalue { i32, i1 } %o, 1116  %v2 = extractvalue { i32, i1 } %o, 0117  %a = add i32 %v2, 100118  %r = select i1 %v1, i32 %a, i32 %v2119  ret i32 %r120}121 122define i32 @uadd_add_load(i32 %x, i32 %y, ptr %pz) nounwind {123; X64-LABEL: uadd_add_load:124; X64:       # %bb.0:125; X64-NEXT:    # kill: def $esi killed $esi def $rsi126; X64-NEXT:    # kill: def $edi killed $edi def $rdi127; X64-NEXT:    leal (%rdi,%rsi), %eax128; X64-NEXT:    addl (%rdx), %eax129; X64-NEXT:    addl %esi, %edi130; X64-NEXT:    cmovael %edi, %eax131; X64-NEXT:    retq132;133; CMOV-LABEL: uadd_add_load:134; CMOV:       # %bb.0:135; CMOV-NEXT:    pushl %esi136; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx137; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax138; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %edx139; CMOV-NEXT:    leal (%eax,%edx), %esi140; CMOV-NEXT:    addl (%ecx), %esi141; CMOV-NEXT:    addl %edx, %eax142; CMOV-NEXT:    cmovbl %esi, %eax143; CMOV-NEXT:    popl %esi144; CMOV-NEXT:    retl145;146; NOCMOV-LABEL: uadd_add_load:147; NOCMOV:       # %bb.0:148; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax149; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %edx150; NOCMOV-NEXT:    leal (%eax,%edx), %ecx151; NOCMOV-NEXT:    addl %edx, %eax152; NOCMOV-NEXT:    jae .LBB3_2153; NOCMOV-NEXT:  # %bb.1:154; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax155; NOCMOV-NEXT:    addl (%eax), %ecx156; NOCMOV-NEXT:    movl %ecx, %eax157; NOCMOV-NEXT:  .LBB3_2:158; NOCMOV-NEXT:    retl159  %o = tail call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)160  %v1 = extractvalue { i32, i1 } %o, 1161  %v2 = extractvalue { i32, i1 } %o, 0162  %z = load i32, ptr %pz163  %a = add i32 %v2, %z164  %r = select i1 %v1, i32 %a, i32 %v2165  ret i32 %r166}167 168define i32 @ssub_add_imm(i32 %x, i32 %y) {169; X64-LABEL: ssub_add_imm:170; X64:       # %bb.0:171; X64-NEXT:    # kill: def $edi killed $edi def $rdi172; X64-NEXT:    subl %esi, %edi173; X64-NEXT:    leal 100(%rdi), %eax174; X64-NEXT:    cmovnol %edi, %eax175; X64-NEXT:    retq176;177; CMOV-LABEL: ssub_add_imm:178; CMOV:       # %bb.0:179; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx180; CMOV-NEXT:    subl {{[0-9]+}}(%esp), %ecx181; CMOV-NEXT:    leal 100(%ecx), %eax182; CMOV-NEXT:    cmovnol %ecx, %eax183; CMOV-NEXT:    retl184;185; NOCMOV-LABEL: ssub_add_imm:186; NOCMOV:       # %bb.0:187; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax188; NOCMOV-NEXT:    subl {{[0-9]+}}(%esp), %eax189; NOCMOV-NEXT:    jno .LBB4_2190; NOCMOV-NEXT:  # %bb.1:191; NOCMOV-NEXT:    addl $100, %eax192; NOCMOV-NEXT:  .LBB4_2:193; NOCMOV-NEXT:    retl194  %o = tail call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %x, i32 %y)195  %v1 = extractvalue { i32, i1 } %o, 1196  %v2 = extractvalue { i32, i1 } %o, 0197  %a = add i32 %v2, 100198  %r = select i1 %v1, i32 %a, i32 %v2199  ret i32 %r200}201 202define i32 @ssub_add_load(i32 %x, i32 %y, ptr %pz) nounwind {203; X64-LABEL: ssub_add_load:204; X64:       # %bb.0:205; X64-NEXT:    movl %edi, %eax206; X64-NEXT:    subl %esi, %eax207; X64-NEXT:    addl (%rdx), %eax208; X64-NEXT:    subl %esi, %edi209; X64-NEXT:    cmovnol %edi, %eax210; X64-NEXT:    retq211;212; CMOV-LABEL: ssub_add_load:213; CMOV:       # %bb.0:214; CMOV-NEXT:    pushl %esi215; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx216; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax217; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %edx218; CMOV-NEXT:    movl %eax, %esi219; CMOV-NEXT:    subl %edx, %esi220; CMOV-NEXT:    addl (%ecx), %esi221; CMOV-NEXT:    subl %edx, %eax222; CMOV-NEXT:    cmovol %esi, %eax223; CMOV-NEXT:    popl %esi224; CMOV-NEXT:    retl225;226; NOCMOV-LABEL: ssub_add_load:227; NOCMOV:       # %bb.0:228; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax229; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %edx230; NOCMOV-NEXT:    movl %eax, %ecx231; NOCMOV-NEXT:    subl %edx, %ecx232; NOCMOV-NEXT:    subl %edx, %eax233; NOCMOV-NEXT:    jno .LBB5_2234; NOCMOV-NEXT:  # %bb.1:235; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax236; NOCMOV-NEXT:    addl (%eax), %ecx237; NOCMOV-NEXT:    movl %ecx, %eax238; NOCMOV-NEXT:  .LBB5_2:239; NOCMOV-NEXT:    retl240  %o = tail call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %x, i32 %y)241  %v1 = extractvalue { i32, i1 } %o, 1242  %v2 = extractvalue { i32, i1 } %o, 0243  %z = load i32, ptr %pz244  %a = add i32 %v2, %z245  %r = select i1 %v1, i32 %a, i32 %v2246  ret i32 %r247}248 249define i32 @usub_add_imm(i32 %x, i32 %y) {250; X64-LABEL: usub_add_imm:251; X64:       # %bb.0:252; X64-NEXT:    # kill: def $edi killed $edi def $rdi253; X64-NEXT:    subl %esi, %edi254; X64-NEXT:    leal 100(%rdi), %eax255; X64-NEXT:    cmovael %edi, %eax256; X64-NEXT:    retq257;258; CMOV-LABEL: usub_add_imm:259; CMOV:       # %bb.0:260; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx261; CMOV-NEXT:    subl {{[0-9]+}}(%esp), %ecx262; CMOV-NEXT:    leal 100(%ecx), %eax263; CMOV-NEXT:    cmovael %ecx, %eax264; CMOV-NEXT:    retl265;266; NOCMOV-LABEL: usub_add_imm:267; NOCMOV:       # %bb.0:268; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax269; NOCMOV-NEXT:    subl {{[0-9]+}}(%esp), %eax270; NOCMOV-NEXT:    jae .LBB6_2271; NOCMOV-NEXT:  # %bb.1:272; NOCMOV-NEXT:    addl $100, %eax273; NOCMOV-NEXT:  .LBB6_2:274; NOCMOV-NEXT:    retl275  %o = tail call { i32, i1 } @llvm.usub.with.overflow.i32(i32 %x, i32 %y)276  %v1 = extractvalue { i32, i1 } %o, 1277  %v2 = extractvalue { i32, i1 } %o, 0278  %a = add i32 %v2, 100279  %r = select i1 %v1, i32 %a, i32 %v2280  ret i32 %r281}282 283define i32 @usub_add_load(i32 %x, i32 %y, ptr %pz) nounwind {284; X64-LABEL: usub_add_load:285; X64:       # %bb.0:286; X64-NEXT:    movl %edi, %eax287; X64-NEXT:    subl %esi, %eax288; X64-NEXT:    addl (%rdx), %eax289; X64-NEXT:    subl %esi, %edi290; X64-NEXT:    cmovael %edi, %eax291; X64-NEXT:    retq292;293; CMOV-LABEL: usub_add_load:294; CMOV:       # %bb.0:295; CMOV-NEXT:    pushl %esi296; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx297; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax298; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %edx299; CMOV-NEXT:    movl %eax, %esi300; CMOV-NEXT:    subl %edx, %esi301; CMOV-NEXT:    addl (%ecx), %esi302; CMOV-NEXT:    subl %edx, %eax303; CMOV-NEXT:    cmovbl %esi, %eax304; CMOV-NEXT:    popl %esi305; CMOV-NEXT:    retl306;307; NOCMOV-LABEL: usub_add_load:308; NOCMOV:       # %bb.0:309; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax310; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %edx311; NOCMOV-NEXT:    movl %eax, %ecx312; NOCMOV-NEXT:    subl %edx, %ecx313; NOCMOV-NEXT:    subl %edx, %eax314; NOCMOV-NEXT:    jae .LBB7_2315; NOCMOV-NEXT:  # %bb.1:316; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax317; NOCMOV-NEXT:    addl (%eax), %ecx318; NOCMOV-NEXT:    movl %ecx, %eax319; NOCMOV-NEXT:  .LBB7_2:320; NOCMOV-NEXT:    retl321  %o = tail call { i32, i1 } @llvm.usub.with.overflow.i32(i32 %x, i32 %y)322  %v1 = extractvalue { i32, i1 } %o, 1323  %v2 = extractvalue { i32, i1 } %o, 0324  %z = load i32, ptr %pz325  %a = add i32 %v2, %z326  %r = select i1 %v1, i32 %a, i32 %v2327  ret i32 %r328}329 330define i32 @smul_add_imm(i32 %x, i32 %y) {331; X64-LABEL: smul_add_imm:332; X64:       # %bb.0:333; X64-NEXT:    # kill: def $edi killed $edi def $rdi334; X64-NEXT:    imull %esi, %edi335; X64-NEXT:    leal 100(%rdi), %eax336; X64-NEXT:    cmovnol %edi, %eax337; X64-NEXT:    retq338;339; CMOV-LABEL: smul_add_imm:340; CMOV:       # %bb.0:341; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx342; CMOV-NEXT:    imull {{[0-9]+}}(%esp), %ecx343; CMOV-NEXT:    leal 100(%ecx), %eax344; CMOV-NEXT:    cmovnol %ecx, %eax345; CMOV-NEXT:    retl346;347; NOCMOV-LABEL: smul_add_imm:348; NOCMOV:       # %bb.0:349; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax350; NOCMOV-NEXT:    imull {{[0-9]+}}(%esp), %eax351; NOCMOV-NEXT:    jno .LBB8_2352; NOCMOV-NEXT:  # %bb.1:353; NOCMOV-NEXT:    addl $100, %eax354; NOCMOV-NEXT:  .LBB8_2:355; NOCMOV-NEXT:    retl356  %o = tail call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %x, i32 %y)357  %v1 = extractvalue { i32, i1 } %o, 1358  %v2 = extractvalue { i32, i1 } %o, 0359  %a = add i32 %v2, 100360  %r = select i1 %v1, i32 %a, i32 %v2361  ret i32 %r362}363 364define i32 @smul_add_load(i32 %x, i32 %y, ptr %pz) nounwind {365; X64-LABEL: smul_add_load:366; X64:       # %bb.0:367; X64-NEXT:    movl %edi, %eax368; X64-NEXT:    imull %esi, %eax369; X64-NEXT:    addl (%rdx), %eax370; X64-NEXT:    imull %esi, %edi371; X64-NEXT:    cmovnol %edi, %eax372; X64-NEXT:    retq373;374; CMOV-LABEL: smul_add_load:375; CMOV:       # %bb.0:376; CMOV-NEXT:    pushl %esi377; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx378; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax379; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %edx380; CMOV-NEXT:    movl %eax, %esi381; CMOV-NEXT:    imull %edx, %esi382; CMOV-NEXT:    addl (%ecx), %esi383; CMOV-NEXT:    imull %edx, %eax384; CMOV-NEXT:    cmovol %esi, %eax385; CMOV-NEXT:    popl %esi386; CMOV-NEXT:    retl387;388; NOCMOV-LABEL: smul_add_load:389; NOCMOV:       # %bb.0:390; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax391; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %edx392; NOCMOV-NEXT:    movl %eax, %ecx393; NOCMOV-NEXT:    imull %edx, %ecx394; NOCMOV-NEXT:    imull %edx, %eax395; NOCMOV-NEXT:    jno .LBB9_2396; NOCMOV-NEXT:  # %bb.1:397; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax398; NOCMOV-NEXT:    addl (%eax), %ecx399; NOCMOV-NEXT:    movl %ecx, %eax400; NOCMOV-NEXT:  .LBB9_2:401; NOCMOV-NEXT:    retl402  %o = tail call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %x, i32 %y)403  %v1 = extractvalue { i32, i1 } %o, 1404  %v2 = extractvalue { i32, i1 } %o, 0405  %z = load i32, ptr %pz406  %a = add i32 %v2, %z407  %r = select i1 %v1, i32 %a, i32 %v2408  ret i32 %r409}410 411define i32 @umul_add_imm(i32 %x, i32 %y) {412; X64-LABEL: umul_add_imm:413; X64:       # %bb.0:414; X64-NEXT:    movl %edi, %eax415; X64-NEXT:    mull %esi416; X64-NEXT:    # kill: def $eax killed $eax def $rax417; X64-NEXT:    leal 100(%rax), %ecx418; X64-NEXT:    cmovol %ecx, %eax419; X64-NEXT:    # kill: def $eax killed $eax killed $rax420; X64-NEXT:    retq421;422; CMOV-LABEL: umul_add_imm:423; CMOV:       # %bb.0:424; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax425; CMOV-NEXT:    mull {{[0-9]+}}(%esp)426; CMOV-NEXT:    leal 100(%eax), %ecx427; CMOV-NEXT:    cmovol %ecx, %eax428; CMOV-NEXT:    retl429;430; NOCMOV-LABEL: umul_add_imm:431; NOCMOV:       # %bb.0:432; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax433; NOCMOV-NEXT:    mull {{[0-9]+}}(%esp)434; NOCMOV-NEXT:    jno .LBB10_2435; NOCMOV-NEXT:  # %bb.1:436; NOCMOV-NEXT:    addl $100, %eax437; NOCMOV-NEXT:  .LBB10_2:438; NOCMOV-NEXT:    retl439  %o = tail call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %x, i32 %y)440  %v1 = extractvalue { i32, i1 } %o, 1441  %v2 = extractvalue { i32, i1 } %o, 0442  %a = add i32 %v2, 100443  %r = select i1 %v1, i32 %a, i32 %v2444  ret i32 %r445}446 447define i32 @umul_add_load(i32 %x, i32 %y, ptr %pz) nounwind {448; X64-LABEL: umul_add_load:449; X64:       # %bb.0:450; X64-NEXT:    movq %rdx, %rcx451; X64-NEXT:    movl %edi, %eax452; X64-NEXT:    mull %esi453; X64-NEXT:    seto %dl454; X64-NEXT:    movl (%rcx), %ecx455; X64-NEXT:    addl %eax, %ecx456; X64-NEXT:    testb %dl, %dl457; X64-NEXT:    cmovnel %ecx, %eax458; X64-NEXT:    retq459;460; CMOV-LABEL: umul_add_load:461; CMOV:       # %bb.0:462; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx463; CMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax464; CMOV-NEXT:    mull {{[0-9]+}}(%esp)465; CMOV-NEXT:    seto %dl466; CMOV-NEXT:    movl (%ecx), %ecx467; CMOV-NEXT:    addl %eax, %ecx468; CMOV-NEXT:    testb %dl, %dl469; CMOV-NEXT:    cmovnel %ecx, %eax470; CMOV-NEXT:    retl471;472; NOCMOV-LABEL: umul_add_load:473; NOCMOV:       # %bb.0:474; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax475; NOCMOV-NEXT:    mull {{[0-9]+}}(%esp)476; NOCMOV-NEXT:    jno .LBB11_2477; NOCMOV-NEXT:  # %bb.1:478; NOCMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx479; NOCMOV-NEXT:    addl (%ecx), %eax480; NOCMOV-NEXT:  .LBB11_2:481; NOCMOV-NEXT:    retl482  %o = tail call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %x, i32 %y)483  %v1 = extractvalue { i32, i1 } %o, 1484  %v2 = extractvalue { i32, i1 } %o, 0485  %z = load i32, ptr %pz486  %a = add i32 %v2, %z487  %r = select i1 %v1, i32 %a, i32 %v2488  ret i32 %r489}490 491declare { i32, i1 } @llvm.sadd.with.overflow.i32(i32, i32)492declare { i32, i1 } @llvm.uadd.with.overflow.i32(i32, i32)493declare { i32, i1 } @llvm.ssub.with.overflow.i32(i32, i32)494declare { i32, i1 } @llvm.usub.with.overflow.i32(i32, i32)495declare { i32, i1 } @llvm.smul.with.overflow.i32(i32, i32)496declare { i32, i1 } @llvm.umul.with.overflow.i32(i32, i32)497