on master help sign in
Merge pull request #890 from Ralith/fix-unsafe-invariant-loads

Fix some load instructions being incorrectly marked as invariant for LLVM

commit4e3535920f7a6015bb9b40b07b41ecf0171f887d authorEdwin Brady <edwin.brady@gmail.com> dateTue 18 Feb 2014, 11:10 (13 years ago) parentd0343eebf2b29e
1 file changed+8−8
src/IRTS/CodegenLLVM.hs+8−8
src/IRTS/CodegenLLVM.hs+8−8
@@ -524,7 +524,7 @@ cgExpr (SChkCase inspect alts) = do
524524 terminate $ CondBr isNull endBBN notNullBBN []
525525 newBlock notNullBBN
526526 ptr <- inst $ BitCast val (PointerType (IntegerType 32) (AddrSpace 0)) []
527− flag <- inst $ loadInv ptr
527+ flag <- inst $ Load False ptr Nothing 0 []
528528 isVal <- inst $ ICmp IPred.EQ flag (ConstantOperand (C.Int 32 (-1))) []
529529 conBBN <- getName "constructor"
530530 terminate $ CondBr isVal endBBN conBBN []
@@ -551,7 +551,7 @@ cgExpr (SProj conVar idx) = do
551551 , ConstantOperand (C.Int 32 1)
552552 , ConstantOperand (C.Int 32 (fromIntegral idx))
553553 ] []
554− Just <$> inst (loadInv ptr)
554+ Just <$> inst (Load False ptr Nothing 0 [])
555555cgExpr (SConst c) = Just <$> cgConst c
556556cgExpr (SForeign LANG_C rty fname args) = do
557557 func <- ensureCDecl fname rty (map fst args)
@@ -630,7 +630,7 @@ cgPrimCase caseValPtr defExp alts = do
630630 SConstCase (TT.Ch _) _ -> IntegerType 32
631631 realPtr <- inst $ BitCast caseValPtr (PointerType (primTy caseTy) (AddrSpace 0)) []
632632 valPtr <- inst $ GetElementPtr True realPtr [ConstantOperand (C.Int 32 0), ConstantOperand (C.Int 32 1)] []
633− caseVal <- inst $ loadInv valPtr
633+ caseVal <- inst $ Load False valPtr Nothing 0 []
634634 defBlockName <- getName "default"
635635 exitBlockName <- getName "caseExit"
636636 namedAlts <- mapM (\a -> do n <- nameAlt defBlockName a; return (n, a)) alts
@@ -643,7 +643,7 @@ cgPrimCase caseValPtr defExp alts = do
643643cgConCase :: Operand -> Maybe SExp -> [SAlt] -> Codegen (Maybe Operand)
644644cgConCase con defExp alts = do
645645 tagPtr <- inst $ GetElementPtr True con [ConstantOperand (C.Int 32 0), ConstantOperand (C.Int 32 0)] []
646− tag <- inst $ loadInv tagPtr
646+ tag <- inst $ Load False tagPtr Nothing 0 []
647647 defBlockName <- getName "default"
648648 exitBlockName <- getName "caseExit"
649649 namedAlts <- mapM (\a -> do n <- nameAlt defBlockName a; return (n, a)) alts
@@ -729,7 +729,7 @@ cgAlt initEnv exitBlockName name destr exp = do
729729 do ptr <- inst $ GetElementPtr True con [ ConstantOperand (C.Int 32 0)
730730 , ConstantOperand (C.Int 32 1)
731731 , ConstantOperand (C.Int 32 i)] []
732− Just <$> ninst argName (loadInv ptr)
732+ Just <$> ninst argName (Load False ptr Nothing 0 [])
733733 altVal <- binds locals $ cgExpr exp
734734 altEnv <- gets lexenv
735735 altBlock <- gets currentBlockName
@@ -783,7 +783,7 @@ unbox FUnit x = return x
783783unbox fty bval = do
784784 val <- inst $ BitCast bval (PointerType (primTy (ftyToTy fty)) (AddrSpace 0)) []
785785 fvalptr <- inst $ GetElementPtr True val [ConstantOperand (C.Int 32 0), ConstantOperand (C.Int 32 1)] []
786− inst $ loadInv fvalptr
786+ inst $ Load False fvalptr Nothing 0 []
787787
788788cgConst' :: TT.Const -> C.Constant
789789cgConst' (TT.I i) = C.Int 32 (fromIntegral i)
@@ -1124,7 +1124,7 @@ cgOp LStrCons [c,s] = do
11241124
11251125cgOp LStrHead [c] = do
11261126 s <- unbox FString c
1127− c <- inst $ loadInv s
1127+ c <- inst $ Load False s Nothing 0 []
11281128 c' <- inst $ ZExt c (IntegerType 32) []
11291129 box (FArith (ATInt ITChar)) c'
11301130
@@ -1132,7 +1132,7 @@ cgOp LStrIndex [s, i] = do
11321132 ns <- unbox FString s
11331133 ni <- unbox (FArith (ATInt (ITFixed IT32))) i
11341134 p <- inst $ GetElementPtr True ns [ni] []
1135− c <- inst $ loadInv p
1135+ c <- inst $ Load False p Nothing 0 []
11361136 c' <- inst $ ZExt c (IntegerType 32) []
11371137 box (FArith (ATInt ITChar)) c'
11381138