571 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-- -mattr=-sse | FileCheck %s --check-prefixes=X86-NOSSE,SDAG-X86-NOSSE3; RUN: llc < %s -mtriple=i686-- -fast-isel -fast-isel-abort=1 -mattr=-sse | FileCheck %s --check-prefixes=X86-NOSSE,FASTISEL-X86-NOSSE4; RUN: llc < %s -mtriple=i686-- -global-isel -global-isel-abort=1 -mattr=-sse | FileCheck %s --check-prefixes=GISEL-X86-NOSSE5; RUN: llc < %s -mtriple=x86_64-- -mattr=-sse | FileCheck %s --check-prefixes=X64-NOSSE,SDAG-X64-NOSSE6; RUN: llc < %s -mtriple=x86_64-- -fast-isel -fast-isel-abort=1 -mattr=-sse | FileCheck %s --check-prefixes=X64-NOSSE,FASTISEL-X64-NOSSE7; RUN: llc < %s -mtriple=x86_64-- -global-isel -global-isel-abort=1 -mattr=-sse | FileCheck %s --check-prefixes=GISEL-X64-NOSSE8; RUN: llc < %s -mtriple=i686-- | FileCheck %s --check-prefixes=X86,SDAG-X869; RUN: llc < %s -mtriple=i686-- -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X86,FASTISEL-X8610; RUN: llc < %s -mtriple=i686-- -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X8611; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefixes=X64,SDAG-X6412; RUN: llc < %s -mtriple=x86_64-- -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefixes=X64,FASTISEL-X6413; RUN: llc < %s -mtriple=x86_64-- -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=GISEL-X6414 15declare void @llvm.set.rounding(i32 %x)16 17define void @func_01() nounwind {18; X86-NOSSE-LABEL: func_01:19; X86-NOSSE: # %bb.0:20; X86-NOSSE-NEXT: pushl %eax21; X86-NOSSE-NEXT: fnstcw (%esp)22; X86-NOSSE-NEXT: orb $12, {{[0-9]+}}(%esp)23; X86-NOSSE-NEXT: fldcw (%esp)24; X86-NOSSE-NEXT: popl %eax25; X86-NOSSE-NEXT: retl26;27; GISEL-X86-NOSSE-LABEL: func_01:28; GISEL-X86-NOSSE: # %bb.0:29; GISEL-X86-NOSSE-NEXT: pushl %eax30; GISEL-X86-NOSSE-NEXT: fnstcw (%esp)31; GISEL-X86-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF32; GISEL-X86-NOSSE-NEXT: andw (%esp), %ax33; GISEL-X86-NOSSE-NEXT: orw $24576, %ax # imm = 0x600034; GISEL-X86-NOSSE-NEXT: movw %ax, (%esp)35; GISEL-X86-NOSSE-NEXT: fldcw (%esp)36; GISEL-X86-NOSSE-NEXT: popl %eax37; GISEL-X86-NOSSE-NEXT: retl38;39; X64-NOSSE-LABEL: func_01:40; X64-NOSSE: # %bb.0:41; X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)42; X64-NOSSE-NEXT: orb $12, -{{[0-9]+}}(%rsp)43; X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)44; X64-NOSSE-NEXT: retq45;46; GISEL-X64-NOSSE-LABEL: func_01:47; GISEL-X64-NOSSE: # %bb.0:48; GISEL-X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)49; GISEL-X64-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF50; GISEL-X64-NOSSE-NEXT: andw -{{[0-9]+}}(%rsp), %ax51; GISEL-X64-NOSSE-NEXT: orw $24576, %ax # imm = 0x600052; GISEL-X64-NOSSE-NEXT: movw %ax, -{{[0-9]+}}(%rsp)53; GISEL-X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)54; GISEL-X64-NOSSE-NEXT: retq55;56; X86-LABEL: func_01:57; X86: # %bb.0:58; X86-NEXT: pushl %eax59; X86-NEXT: fnstcw (%esp)60; X86-NEXT: orb $12, {{[0-9]+}}(%esp)61; X86-NEXT: fldcw (%esp)62; X86-NEXT: popl %eax63; X86-NEXT: retl64;65; GISEL-X86-LABEL: func_01:66; GISEL-X86: # %bb.0:67; GISEL-X86-NEXT: pushl %eax68; GISEL-X86-NEXT: fnstcw (%esp)69; GISEL-X86-NEXT: movw $-3073, %ax # imm = 0xF3FF70; GISEL-X86-NEXT: andw (%esp), %ax71; GISEL-X86-NEXT: orw $24576, %ax # imm = 0x600072; GISEL-X86-NEXT: movw %ax, (%esp)73; GISEL-X86-NEXT: fldcw (%esp)74; GISEL-X86-NEXT: popl %eax75; GISEL-X86-NEXT: retl76;77; X64-LABEL: func_01:78; X64: # %bb.0:79; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)80; X64-NEXT: orb $12, -{{[0-9]+}}(%rsp)81; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)82; X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)83; X64-NEXT: orb $96, -{{[0-9]+}}(%rsp)84; X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)85; X64-NEXT: retq86;87; GISEL-X64-LABEL: func_01:88; GISEL-X64: # %bb.0:89; GISEL-X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)90; GISEL-X64-NEXT: movw $-3073, %ax # imm = 0xF3FF91; GISEL-X64-NEXT: andw -{{[0-9]+}}(%rsp), %ax92; GISEL-X64-NEXT: orw $24576, %ax # imm = 0x600093; GISEL-X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)94; GISEL-X64-NEXT: fldcw -{{[0-9]+}}(%rsp)95; GISEL-X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)96; GISEL-X64-NEXT: movl $-24577, %eax # imm = 0x9FFF97; GISEL-X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax98; GISEL-X64-NEXT: orl $24576, %eax # imm = 0x600099; GISEL-X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)100; GISEL-X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)101; GISEL-X64-NEXT: retq102 call void @llvm.set.rounding(i32 0) ; TowardZero (CW[11-10] = 11)103 ret void104}105 106define void @func_02() nounwind {107; X86-NOSSE-LABEL: func_02:108; X86-NOSSE: # %bb.0:109; X86-NOSSE-NEXT: pushl %eax110; X86-NOSSE-NEXT: fnstcw (%esp)111; X86-NOSSE-NEXT: andb $-13, {{[0-9]+}}(%esp)112; X86-NOSSE-NEXT: fldcw (%esp)113; X86-NOSSE-NEXT: popl %eax114; X86-NOSSE-NEXT: retl115;116; GISEL-X86-NOSSE-LABEL: func_02:117; GISEL-X86-NOSSE: # %bb.0:118; GISEL-X86-NOSSE-NEXT: pushl %eax119; GISEL-X86-NOSSE-NEXT: fnstcw (%esp)120; GISEL-X86-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF121; GISEL-X86-NOSSE-NEXT: andw (%esp), %ax122; GISEL-X86-NOSSE-NEXT: orw $0, %ax123; GISEL-X86-NOSSE-NEXT: movw %ax, (%esp)124; GISEL-X86-NOSSE-NEXT: fldcw (%esp)125; GISEL-X86-NOSSE-NEXT: popl %eax126; GISEL-X86-NOSSE-NEXT: retl127;128; X64-NOSSE-LABEL: func_02:129; X64-NOSSE: # %bb.0:130; X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)131; X64-NOSSE-NEXT: andb $-13, -{{[0-9]+}}(%rsp)132; X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)133; X64-NOSSE-NEXT: retq134;135; GISEL-X64-NOSSE-LABEL: func_02:136; GISEL-X64-NOSSE: # %bb.0:137; GISEL-X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)138; GISEL-X64-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF139; GISEL-X64-NOSSE-NEXT: andw -{{[0-9]+}}(%rsp), %ax140; GISEL-X64-NOSSE-NEXT: orw $0, %ax141; GISEL-X64-NOSSE-NEXT: movw %ax, -{{[0-9]+}}(%rsp)142; GISEL-X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)143; GISEL-X64-NOSSE-NEXT: retq144;145; X86-LABEL: func_02:146; X86: # %bb.0:147; X86-NEXT: pushl %eax148; X86-NEXT: fnstcw (%esp)149; X86-NEXT: andb $-13, {{[0-9]+}}(%esp)150; X86-NEXT: fldcw (%esp)151; X86-NEXT: popl %eax152; X86-NEXT: retl153;154; GISEL-X86-LABEL: func_02:155; GISEL-X86: # %bb.0:156; GISEL-X86-NEXT: pushl %eax157; GISEL-X86-NEXT: fnstcw (%esp)158; GISEL-X86-NEXT: movw $-3073, %ax # imm = 0xF3FF159; GISEL-X86-NEXT: andw (%esp), %ax160; GISEL-X86-NEXT: orw $0, %ax161; GISEL-X86-NEXT: movw %ax, (%esp)162; GISEL-X86-NEXT: fldcw (%esp)163; GISEL-X86-NEXT: popl %eax164; GISEL-X86-NEXT: retl165;166; X64-LABEL: func_02:167; X64: # %bb.0:168; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)169; X64-NEXT: andb $-13, -{{[0-9]+}}(%rsp)170; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)171; X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)172; X64-NEXT: andb $-97, -{{[0-9]+}}(%rsp)173; X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)174; X64-NEXT: retq175;176; GISEL-X64-LABEL: func_02:177; GISEL-X64: # %bb.0:178; GISEL-X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)179; GISEL-X64-NEXT: movw $-3073, %ax # imm = 0xF3FF180; GISEL-X64-NEXT: andw -{{[0-9]+}}(%rsp), %ax181; GISEL-X64-NEXT: orw $0, %ax182; GISEL-X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)183; GISEL-X64-NEXT: fldcw -{{[0-9]+}}(%rsp)184; GISEL-X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)185; GISEL-X64-NEXT: movl $-24577, %eax # imm = 0x9FFF186; GISEL-X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax187; GISEL-X64-NEXT: orl $0, %eax188; GISEL-X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)189; GISEL-X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)190; GISEL-X64-NEXT: retq191 call void @llvm.set.rounding(i32 1) ; ToNearestTiesToEven (CW[11-10] = 00)192 ret void193}194 195define void @func_03() nounwind {196; X86-NOSSE-LABEL: func_03:197; X86-NOSSE: # %bb.0:198; X86-NOSSE-NEXT: pushl %eax199; X86-NOSSE-NEXT: fnstcw (%esp)200; X86-NOSSE-NEXT: movl $-3073, %eax # imm = 0xF3FF201; X86-NOSSE-NEXT: andl (%esp), %eax202; X86-NOSSE-NEXT: orl $2048, %eax # imm = 0x800203; X86-NOSSE-NEXT: movw %ax, (%esp)204; X86-NOSSE-NEXT: fldcw (%esp)205; X86-NOSSE-NEXT: popl %eax206; X86-NOSSE-NEXT: retl207;208; GISEL-X86-NOSSE-LABEL: func_03:209; GISEL-X86-NOSSE: # %bb.0:210; GISEL-X86-NOSSE-NEXT: pushl %eax211; GISEL-X86-NOSSE-NEXT: fnstcw (%esp)212; GISEL-X86-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF213; GISEL-X86-NOSSE-NEXT: andw (%esp), %ax214; GISEL-X86-NOSSE-NEXT: orw $16384, %ax # imm = 0x4000215; GISEL-X86-NOSSE-NEXT: movw %ax, (%esp)216; GISEL-X86-NOSSE-NEXT: fldcw (%esp)217; GISEL-X86-NOSSE-NEXT: popl %eax218; GISEL-X86-NOSSE-NEXT: retl219;220; X64-NOSSE-LABEL: func_03:221; X64-NOSSE: # %bb.0:222; X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)223; X64-NOSSE-NEXT: movl $-3073, %eax # imm = 0xF3FF224; X64-NOSSE-NEXT: andl -{{[0-9]+}}(%rsp), %eax225; X64-NOSSE-NEXT: orl $2048, %eax # imm = 0x800226; X64-NOSSE-NEXT: movw %ax, -{{[0-9]+}}(%rsp)227; X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)228; X64-NOSSE-NEXT: retq229;230; GISEL-X64-NOSSE-LABEL: func_03:231; GISEL-X64-NOSSE: # %bb.0:232; GISEL-X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)233; GISEL-X64-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF234; GISEL-X64-NOSSE-NEXT: andw -{{[0-9]+}}(%rsp), %ax235; GISEL-X64-NOSSE-NEXT: orw $16384, %ax # imm = 0x4000236; GISEL-X64-NOSSE-NEXT: movw %ax, -{{[0-9]+}}(%rsp)237; GISEL-X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)238; GISEL-X64-NOSSE-NEXT: retq239;240; X86-LABEL: func_03:241; X86: # %bb.0:242; X86-NEXT: pushl %eax243; X86-NEXT: fnstcw (%esp)244; X86-NEXT: movl $-3073, %eax # imm = 0xF3FF245; X86-NEXT: andl (%esp), %eax246; X86-NEXT: orl $2048, %eax # imm = 0x800247; X86-NEXT: movw %ax, (%esp)248; X86-NEXT: fldcw (%esp)249; X86-NEXT: popl %eax250; X86-NEXT: retl251;252; GISEL-X86-LABEL: func_03:253; GISEL-X86: # %bb.0:254; GISEL-X86-NEXT: pushl %eax255; GISEL-X86-NEXT: fnstcw (%esp)256; GISEL-X86-NEXT: movw $-3073, %ax # imm = 0xF3FF257; GISEL-X86-NEXT: andw (%esp), %ax258; GISEL-X86-NEXT: orw $16384, %ax # imm = 0x4000259; GISEL-X86-NEXT: movw %ax, (%esp)260; GISEL-X86-NEXT: fldcw (%esp)261; GISEL-X86-NEXT: popl %eax262; GISEL-X86-NEXT: retl263;264; X64-LABEL: func_03:265; X64: # %bb.0:266; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)267; X64-NEXT: movl $-3073, %eax # imm = 0xF3FF268; X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax269; X64-NEXT: orl $2048, %eax # imm = 0x800270; X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)271; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)272; X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)273; X64-NEXT: movl $-24577, %eax # imm = 0x9FFF274; X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax275; X64-NEXT: orl $16384, %eax # imm = 0x4000276; X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)277; X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)278; X64-NEXT: retq279;280; GISEL-X64-LABEL: func_03:281; GISEL-X64: # %bb.0:282; GISEL-X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)283; GISEL-X64-NEXT: movw $-3073, %ax # imm = 0xF3FF284; GISEL-X64-NEXT: andw -{{[0-9]+}}(%rsp), %ax285; GISEL-X64-NEXT: orw $16384, %ax # imm = 0x4000286; GISEL-X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)287; GISEL-X64-NEXT: fldcw -{{[0-9]+}}(%rsp)288; GISEL-X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)289; GISEL-X64-NEXT: movl $-24577, %eax # imm = 0x9FFF290; GISEL-X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax291; GISEL-X64-NEXT: orl $16384, %eax # imm = 0x4000292; GISEL-X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)293; GISEL-X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)294; GISEL-X64-NEXT: retq295 call void @llvm.set.rounding(i32 2) ; Upward (CW[11-10] = 10)296 ret void297}298 299define void @func_04() nounwind {300; X86-NOSSE-LABEL: func_04:301; X86-NOSSE: # %bb.0:302; X86-NOSSE-NEXT: pushl %eax303; X86-NOSSE-NEXT: fnstcw (%esp)304; X86-NOSSE-NEXT: movl $-3073, %eax # imm = 0xF3FF305; X86-NOSSE-NEXT: andl (%esp), %eax306; X86-NOSSE-NEXT: orl $1024, %eax # imm = 0x400307; X86-NOSSE-NEXT: movw %ax, (%esp)308; X86-NOSSE-NEXT: fldcw (%esp)309; X86-NOSSE-NEXT: popl %eax310; X86-NOSSE-NEXT: retl311;312; GISEL-X86-NOSSE-LABEL: func_04:313; GISEL-X86-NOSSE: # %bb.0:314; GISEL-X86-NOSSE-NEXT: pushl %eax315; GISEL-X86-NOSSE-NEXT: fnstcw (%esp)316; GISEL-X86-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF317; GISEL-X86-NOSSE-NEXT: andw (%esp), %ax318; GISEL-X86-NOSSE-NEXT: orw $8192, %ax # imm = 0x2000319; GISEL-X86-NOSSE-NEXT: movw %ax, (%esp)320; GISEL-X86-NOSSE-NEXT: fldcw (%esp)321; GISEL-X86-NOSSE-NEXT: popl %eax322; GISEL-X86-NOSSE-NEXT: retl323;324; X64-NOSSE-LABEL: func_04:325; X64-NOSSE: # %bb.0:326; X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)327; X64-NOSSE-NEXT: movl $-3073, %eax # imm = 0xF3FF328; X64-NOSSE-NEXT: andl -{{[0-9]+}}(%rsp), %eax329; X64-NOSSE-NEXT: orl $1024, %eax # imm = 0x400330; X64-NOSSE-NEXT: movw %ax, -{{[0-9]+}}(%rsp)331; X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)332; X64-NOSSE-NEXT: retq333;334; GISEL-X64-NOSSE-LABEL: func_04:335; GISEL-X64-NOSSE: # %bb.0:336; GISEL-X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)337; GISEL-X64-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF338; GISEL-X64-NOSSE-NEXT: andw -{{[0-9]+}}(%rsp), %ax339; GISEL-X64-NOSSE-NEXT: orw $8192, %ax # imm = 0x2000340; GISEL-X64-NOSSE-NEXT: movw %ax, -{{[0-9]+}}(%rsp)341; GISEL-X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)342; GISEL-X64-NOSSE-NEXT: retq343;344; X86-LABEL: func_04:345; X86: # %bb.0:346; X86-NEXT: pushl %eax347; X86-NEXT: fnstcw (%esp)348; X86-NEXT: movl $-3073, %eax # imm = 0xF3FF349; X86-NEXT: andl (%esp), %eax350; X86-NEXT: orl $1024, %eax # imm = 0x400351; X86-NEXT: movw %ax, (%esp)352; X86-NEXT: fldcw (%esp)353; X86-NEXT: popl %eax354; X86-NEXT: retl355;356; GISEL-X86-LABEL: func_04:357; GISEL-X86: # %bb.0:358; GISEL-X86-NEXT: pushl %eax359; GISEL-X86-NEXT: fnstcw (%esp)360; GISEL-X86-NEXT: movw $-3073, %ax # imm = 0xF3FF361; GISEL-X86-NEXT: andw (%esp), %ax362; GISEL-X86-NEXT: orw $8192, %ax # imm = 0x2000363; GISEL-X86-NEXT: movw %ax, (%esp)364; GISEL-X86-NEXT: fldcw (%esp)365; GISEL-X86-NEXT: popl %eax366; GISEL-X86-NEXT: retl367;368; X64-LABEL: func_04:369; X64: # %bb.0:370; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)371; X64-NEXT: movl $-3073, %eax # imm = 0xF3FF372; X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax373; X64-NEXT: orl $1024, %eax # imm = 0x400374; X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)375; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)376; X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)377; X64-NEXT: movl $-24577, %eax # imm = 0x9FFF378; X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax379; X64-NEXT: orl $8192, %eax # imm = 0x2000380; X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)381; X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)382; X64-NEXT: retq383;384; GISEL-X64-LABEL: func_04:385; GISEL-X64: # %bb.0:386; GISEL-X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)387; GISEL-X64-NEXT: movw $-3073, %ax # imm = 0xF3FF388; GISEL-X64-NEXT: andw -{{[0-9]+}}(%rsp), %ax389; GISEL-X64-NEXT: orw $8192, %ax # imm = 0x2000390; GISEL-X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)391; GISEL-X64-NEXT: fldcw -{{[0-9]+}}(%rsp)392; GISEL-X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)393; GISEL-X64-NEXT: movl $-24577, %eax # imm = 0x9FFF394; GISEL-X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax395; GISEL-X64-NEXT: orl $8192, %eax # imm = 0x2000396; GISEL-X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)397; GISEL-X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)398; GISEL-X64-NEXT: retq399 call void @llvm.set.rounding(i32 3) ; Downward (CW[11-10] = 01)400 ret void401}402 403define void @func_05(i32 %x) nounwind {404; X86-NOSSE-LABEL: func_05:405; X86-NOSSE: # %bb.0:406; X86-NOSSE-NEXT: pushl %eax407; X86-NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax408; X86-NOSSE-NEXT: leal 4(%eax,%eax), %ecx409; X86-NOSSE-NEXT: movl $201, %eax410; X86-NOSSE-NEXT: # kill: def $cl killed $cl killed $ecx411; X86-NOSSE-NEXT: shll %cl, %eax412; X86-NOSSE-NEXT: andl $3072, %eax # imm = 0xC00413; X86-NOSSE-NEXT: fnstcw (%esp)414; X86-NOSSE-NEXT: movl $-3073, %ecx # imm = 0xF3FF415; X86-NOSSE-NEXT: andl (%esp), %ecx416; X86-NOSSE-NEXT: orl %eax, %ecx417; X86-NOSSE-NEXT: movw %cx, (%esp)418; X86-NOSSE-NEXT: fldcw (%esp)419; X86-NOSSE-NEXT: popl %eax420; X86-NOSSE-NEXT: retl421;422; GISEL-X86-NOSSE-LABEL: func_05:423; GISEL-X86-NOSSE: # %bb.0:424; GISEL-X86-NOSSE-NEXT: pushl %eax425; GISEL-X86-NOSSE-NEXT: movl {{[0-9]+}}(%esp), %ecx426; GISEL-X86-NOSSE-NEXT: fnstcw (%esp)427; GISEL-X86-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF428; GISEL-X86-NOSSE-NEXT: andw (%esp), %ax429; GISEL-X86-NOSSE-NEXT: addl %ecx, %ecx430; GISEL-X86-NOSSE-NEXT: addl $4, %ecx431; GISEL-X86-NOSSE-NEXT: movw $201, %dx432; GISEL-X86-NOSSE-NEXT: # kill: def $cl killed $cl killed $ecx433; GISEL-X86-NOSSE-NEXT: shlw %cl, %dx434; GISEL-X86-NOSSE-NEXT: andw $3072, %dx # imm = 0xC00435; GISEL-X86-NOSSE-NEXT: orw %ax, %dx436; GISEL-X86-NOSSE-NEXT: movw %dx, (%esp)437; GISEL-X86-NOSSE-NEXT: fldcw (%esp)438; GISEL-X86-NOSSE-NEXT: popl %eax439; GISEL-X86-NOSSE-NEXT: retl440;441; X64-NOSSE-LABEL: func_05:442; X64-NOSSE: # %bb.0:443; X64-NOSSE-NEXT: # kill: def $edi killed $edi def $rdi444; X64-NOSSE-NEXT: leal 4(%rdi,%rdi), %ecx445; X64-NOSSE-NEXT: movl $201, %eax446; X64-NOSSE-NEXT: # kill: def $cl killed $cl killed $ecx447; X64-NOSSE-NEXT: shll %cl, %eax448; X64-NOSSE-NEXT: andl $3072, %eax # imm = 0xC00449; X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)450; X64-NOSSE-NEXT: movl $-3073, %ecx # imm = 0xF3FF451; X64-NOSSE-NEXT: andl -{{[0-9]+}}(%rsp), %ecx452; X64-NOSSE-NEXT: orl %eax, %ecx453; X64-NOSSE-NEXT: movw %cx, -{{[0-9]+}}(%rsp)454; X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)455; X64-NOSSE-NEXT: retq456;457; GISEL-X64-NOSSE-LABEL: func_05:458; GISEL-X64-NOSSE: # %bb.0:459; GISEL-X64-NOSSE-NEXT: # kill: def $edi killed $edi def $rdi460; GISEL-X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)461; GISEL-X64-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF462; GISEL-X64-NOSSE-NEXT: andw -{{[0-9]+}}(%rsp), %ax463; GISEL-X64-NOSSE-NEXT: leal (%rdi,%rdi), %ecx464; GISEL-X64-NOSSE-NEXT: addl $4, %ecx465; GISEL-X64-NOSSE-NEXT: movw $201, %dx466; GISEL-X64-NOSSE-NEXT: # kill: def $cl killed $cl killed $ecx467; GISEL-X64-NOSSE-NEXT: shlw %cl, %dx468; GISEL-X64-NOSSE-NEXT: andw $3072, %dx # imm = 0xC00469; GISEL-X64-NOSSE-NEXT: orw %ax, %dx470; GISEL-X64-NOSSE-NEXT: movw %dx, -{{[0-9]+}}(%rsp)471; GISEL-X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)472; GISEL-X64-NOSSE-NEXT: retq473;474; X86-LABEL: func_05:475; X86: # %bb.0:476; X86-NEXT: pushl %eax477; X86-NEXT: movl {{[0-9]+}}(%esp), %eax478; X86-NEXT: leal 4(%eax,%eax), %ecx479; X86-NEXT: movl $201, %eax480; X86-NEXT: # kill: def $cl killed $cl killed $ecx481; X86-NEXT: shll %cl, %eax482; X86-NEXT: andl $3072, %eax # imm = 0xC00483; X86-NEXT: fnstcw (%esp)484; X86-NEXT: movl $-3073, %ecx # imm = 0xF3FF485; X86-NEXT: andl (%esp), %ecx486; X86-NEXT: orl %eax, %ecx487; X86-NEXT: movw %cx, (%esp)488; X86-NEXT: fldcw (%esp)489; X86-NEXT: popl %eax490; X86-NEXT: retl491;492; GISEL-X86-LABEL: func_05:493; GISEL-X86: # %bb.0:494; GISEL-X86-NEXT: pushl %eax495; GISEL-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx496; GISEL-X86-NEXT: fnstcw (%esp)497; GISEL-X86-NEXT: movw $-3073, %ax # imm = 0xF3FF498; GISEL-X86-NEXT: andw (%esp), %ax499; GISEL-X86-NEXT: addl %ecx, %ecx500; GISEL-X86-NEXT: addl $4, %ecx501; GISEL-X86-NEXT: movw $201, %dx502; GISEL-X86-NEXT: # kill: def $cl killed $cl killed $ecx503; GISEL-X86-NEXT: shlw %cl, %dx504; GISEL-X86-NEXT: andw $3072, %dx # imm = 0xC00505; GISEL-X86-NEXT: orw %ax, %dx506; GISEL-X86-NEXT: movw %dx, (%esp)507; GISEL-X86-NEXT: fldcw (%esp)508; GISEL-X86-NEXT: popl %eax509; GISEL-X86-NEXT: retl510;511; X64-LABEL: func_05:512; X64: # %bb.0:513; X64-NEXT: # kill: def $edi killed $edi def $rdi514; X64-NEXT: leal 4(%rdi,%rdi), %ecx515; X64-NEXT: movl $201, %eax516; X64-NEXT: # kill: def $cl killed $cl killed $ecx517; X64-NEXT: shll %cl, %eax518; X64-NEXT: andl $3072, %eax # imm = 0xC00519; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)520; X64-NEXT: movl $-3073, %ecx # imm = 0xF3FF521; X64-NEXT: andl -{{[0-9]+}}(%rsp), %ecx522; X64-NEXT: orl %eax, %ecx523; X64-NEXT: movw %cx, -{{[0-9]+}}(%rsp)524; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)525; X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)526; X64-NEXT: movl $-24577, %ecx # imm = 0x9FFF527; X64-NEXT: andl -{{[0-9]+}}(%rsp), %ecx528; X64-NEXT: leal (%rcx,%rax,8), %eax529; X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)530; X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)531; X64-NEXT: retq532;533; GISEL-X64-LABEL: func_05:534; GISEL-X64: # %bb.0:535; GISEL-X64-NEXT: # kill: def $edi killed $edi def $rdi536; GISEL-X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)537; GISEL-X64-NEXT: movw $-3073, %ax # imm = 0xF3FF538; GISEL-X64-NEXT: andw -{{[0-9]+}}(%rsp), %ax539; GISEL-X64-NEXT: leal (%rdi,%rdi), %ecx540; GISEL-X64-NEXT: addl $4, %ecx541; GISEL-X64-NEXT: movw $201, %dx542; GISEL-X64-NEXT: # kill: def $cl killed $cl killed $ecx543; GISEL-X64-NEXT: shlw %cl, %dx544; GISEL-X64-NEXT: andw $3072, %dx # imm = 0xC00545; GISEL-X64-NEXT: movzwl %dx, %ecx546; GISEL-X64-NEXT: leal (,%rcx,8), %edx547; GISEL-X64-NEXT: orw %ax, %cx548; GISEL-X64-NEXT: movw %cx, -{{[0-9]+}}(%rsp)549; GISEL-X64-NEXT: fldcw -{{[0-9]+}}(%rsp)550; GISEL-X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)551; GISEL-X64-NEXT: movl $-24577, %eax # imm = 0x9FFF552; GISEL-X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax553; GISEL-X64-NEXT: orl %edx, %eax554; GISEL-X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)555; GISEL-X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)556; GISEL-X64-NEXT: retq557 call void @llvm.set.rounding(i32 %x) ; Downward558 ret void559}560 561attributes #0 = { nounwind "use-soft-float"="true" }562;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:563; FASTISEL-X64: {{.*}}564; FASTISEL-X64-NOSSE: {{.*}}565; FASTISEL-X86: {{.*}}566; FASTISEL-X86-NOSSE: {{.*}}567; SDAG-X64: {{.*}}568; SDAG-X64-NOSSE: {{.*}}569; SDAG-X86: {{.*}}570; SDAG-X86-NOSSE: {{.*}}571