Don't set neverHasSideEffects on x86's divide instructions, since
authorDan Gohman <gohman@apple.com>
Tue, 18 Nov 2008 21:29:14 +0000 (21:29 +0000)
committerDan Gohman <gohman@apple.com>
Tue, 18 Nov 2008 21:29:14 +0000 (21:29 +0000)
they trap on divide-by-zero, and this side effect is otherwise
unmodeled.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59551 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86Instr64bit.td
lib/Target/X86/X86InstrInfo.td

index 125eefbf518bea5465f575b1cc18299b7f50c561..98ad32c550ddb0f517fbfe02e3efbbaf76524c30 100644 (file)
@@ -474,7 +474,6 @@ def IMUL64rmi8 : RIi8<0x6B, MRMSrcMem,                      // GR64 = [mem64]*I8
 } // Defs = [EFLAGS]
 
 // Unsigned division / remainder
-let neverHasSideEffects = 1 in {
 let Defs = [RAX,RDX,EFLAGS], Uses = [RAX,RDX] in {
 def DIV64r : RI<0xF7, MRM6r, (outs), (ins GR64:$src),        // RDX:RAX/r64 = RAX,RDX
                 "div{q}\t$src", []>;
@@ -488,7 +487,6 @@ def IDIV64m: RI<0xF7, MRM7m, (outs), (ins i64mem:$src),      // RDX:RAX/[mem64]
                 "idiv{q}\t$src", []>;
 }
 }
-}
 
 // Unary instructions
 let Defs = [EFLAGS], CodeSize = 2 in {
index 128f12de77c5236ffb5713608883a15ccb026c9e..fd463973fdacd28828f2932587534f86f8239500 100644 (file)
@@ -747,6 +747,7 @@ let Defs = [EAX,EDX], Uses = [EAX] in
 def IMUL32m : I<0xF7, MRM5m, (outs), (ins i32mem:$src),
                 "imul{l}\t$src", []>;  // EAX,EDX = EAX*[mem32]
 }
+} // neverHasSideEffects
 
 // unsigned division/remainder
 let Defs = [AL,AH,EFLAGS], Uses = [AX] in
@@ -791,7 +792,6 @@ let Defs = [EAX,EDX,EFLAGS], Uses = [EAX,EDX] in
 def IDIV32m: I<0xF7, MRM7m, (outs), (ins i32mem:$src),     // EDX:EAX/[mem32] = EAX,EDX
                "idiv{l}\t$src", []>;
 }
-} // neverHasSideEffects
 
 //===----------------------------------------------------------------------===//
 //  Two address Instructions.